2016-08-22 5 views
1

Nach einem HD-Problem und einige Arbeit habe ich eine Reihe von Dateien mit Namen wie „f1234“, „f1235“ usw.sortieren Dateien nach ihrem Dateityp

Mein Ziel ist es, diese Dateien zu sortieren nach ihrer Dateityp. Zum Beispiel möchte ich alle PDF-Dateien im Verzeichnis "pdfs" verschieben.

Für eine Datei kann ich tun: "Datei f1234", und wenn es eine PDF ist, kann ich "mv f1234 pdfs /". Aber ich habe Tausende von Dateien ... Kannst du mir mit einem bash oder zsh Befehl helfen, alle PDF in einem Durchgang zu sortieren? Danke

+1

'für f in f *; Fall $ (Datei "$ f") in PDF) echo/bin/mv "$ f" /path/to/pdf/dir/"$f".pdf ;; *) echo "kein PDF $ f" 1> &2 ;; esac; fertig. Untersuchen Sie die Ausgabe sorgfältig, und wenn es OK aussieht, entfernen Sie das Echo in der PDF-Hülle. Sie müssen "in PDF" ändern, damit es mit der tatsächlichen Ausgabe von "file f1234" übereinstimmt, wenn es sich um eine PDF-Datei handelt. (Dbl-zitieren Sie die Übereinstimmungszeichenfolge, wenn Leerzeichen vorhanden sind). Viel Glück. – shellter

Antwort

5

Der schwierige Teil hier ist zuverlässig die Ausgabe von file in einen Verzeichnisnamen. Ich denke, der beste Kandidat dafür ist der MIME-Typ der Datei und nicht die von Menschen lesbare Ausgabe von file. Ich würde verwenden so etwas wie:

mkdir sorted 
for f in f* 
do 
    d=$(file -b --mime-type "$f" | tr/-) 
    mkdir -p "sorted/$d" 
    mv "$f" "sorted/$d/" 
done 

Offensichtlich würde ich das ein bisschen testen, bevor es auf Ihre Dateien ausgeführt wird, aber etwas ziemlich nah an das sollte funktionieren.

+1

'Datei -bi" $ f "| geschnitten -d ';' -f1 | tr/-' kann zu 'file -b --mime-type" $ f "| gekürzt werden tr/-'. – alvits

+0

Ahh, das ist besser! Ich werde die Antwort ändern, um das zu reflektieren. – Julian

Verwandte Themen