2017-01-08 2 views
0

Ich versuche, meine 46k Bilder von Mac Fotos in ein vernünftiges Datum & zeitbasierte Ordnerstruktur und Dateinamen in einem anderen Programm zu verwenden oder einfach nur auf die Dateien durch Finder. Dank Stackoverflow und der Hilfe Ihres Typen, die ich geschafft habe, indem ich den Master-Ordner aus der Bibliothek kopiert habe und dann das Skript mit einem mv-Befehl in diesem Ordner ausgeführt habe, bin ich irgendwie herausgefordert und würde gerne eine richtige Lösung finden braucht Hilfe:Loop Trog Dateien in Fotobibliothek findet keine Datei

ich laufe in einen Fehler mit dem Code keine Dateien in der Bibliothek zu finden:

  • den Raum und der Punkt ist nicht das Problem, es getestet mit „/ Users/Jan/Desktop/Fotos xy "
  • mdfind arbeitet für die Fotos Bibliothek im Terminal
  • mdfind findet 170k Dateien beim Ausführen auf/Users/Jan/P Allerdings würde das nicht nur die Originalbilder aus der Bibliothek kopieren.

Vielen Dank im Voraus!

#!/bin/bash 
#ensure no errors with spaces in filenames 
SAVEIFS=$IFS 
IFS=$(echo -en "\n\b") 
#define variables to count files and progress 
x=0 
y=0 
#count files in Master (Original Pictures) directory 
for file in `mdfind file -onlyin "/Users/Jan/Pictures/Photos Library.photoslibrary/Masters"` 
do 
    x=$((x+1)) 
done 
echo "$x files found" 
#loop for all files in Master (Original Pictures) directory 
for file in `mdfind file -onlyin "/Users/Jan/Pictures/Photos Library.photoslibrary/Masters"` 
do 
    #get date and timestamp of creation date and define Year, Month, Day, Hour, Minute & Second as variable for the filename 
    D=$(mdls "$file" | grep ContentCreationDate | awk '{print $3, $4}') 
    YYYY=$(echo $D| cut -c 1-4) 
    MM=$(echo $D| cut -c 6-7) 
    DD=$(echo $D| cut -c 9-10) 
    H=$(echo $D| cut -c 12-13) 
    M=$(echo $D| cut -c 15-16) 
    S=$(echo $D| cut -c 18-19) 
    #add a variable in case multiple files with same timestamp exist 
    i=1 
    #define path and create new folders if required: "One per month in every year" 
    newdir=$(echo /Users/Jan/Desktop/Photos/Sorted/$YYYY/$MM/) 
    mkdir -p $newdir 
    #get file extension 
    ext=$(echo "$file"|awk -F . '{print $NF}') 
    #define path and name of new file 
    newfile=$(echo $newdir$YYYY-$MM-$DD_$H-$M-$S.$ext) 
    #add a loop to add variable i and increase i in case a file with the same timestamp already exists 
    while test -f "$newfile" 
     do newfile=$(echo $newdir$YYYY-$MM-$DD_$H-$M-$S_$i.$ext) 
     i=$((i+1)) 
    done 
    #copy file into new directory with new timestamp name 
    cp -p "$file" "$newfile" 
    y=$((y+1)) 
    echo "$y out of $x files completed" 
done 
exit 
+0

Gibt es eine Fehlermeldung? Haben Sie versucht, das Skript im Debug-Modus ('-x') auszuführen? – Jdamian

+0

Wissen Sie, dass Sie '$ (echo ···)' 'nicht benutzen müssen?' 'Newfile =" $ newdir $ YYYY- $ MM- $ DD_ $ H- $ M- $ S. $ ext "' – Jdamian

Antwort

0

Haben Sie über die Verwendung von exiftool nachgedacht?

exiftool -r -P -d "/path/to/new/folder/%Y/%m/img_%Y%m%d_%H%M%S%%-c.%%e" "-filename<createdate" "/path/to/existing/pictures" 

Dadurch werden alle Bilder in einen Ordner/Benennungsstruktur setzen nach Jahr, Monat, Zeit, aufgeschlüsselt und zählen das Datum des Fotos erstellen verwenden. Es wird auch das Original entfernen.

Ich nutze dies, wenn ich meine Bilderjahre säubere und neue importiere. Wenn das Erstellungsdatum nicht existiert, wird die Datei übersprungen.