Ich habe etwas mehr als tausend (1000) Dateien, deren Suffix/Erweiterung von einer Datenbank-Engine alle auf dasselbe geändert wurden (z. B. Dateiname.abcd, wobei .abcd in jeder Datei steht, unabhängig davon, ob es sich um eine JPG-, PDF- oder was auch immer sonst).
Das Ziel ist es, alle Dateien in PDF zu konvertieren, aber ich möchte zuerst nur die verschiedenen Dateitypen in separate Ordner sortieren.
Ich verwende Mac OS X und stelle fest, dass es ein Terminal-Skript geben muss, das Folgendes tun würde:
Bei Verwendung des Terminal-Befehls „Datei“ für eine Datei mit dem Datenbank-Suffix sind typische Ergebnisse ziemlich wortreich wie dieses, was zumindest zeigt, dass der Mac die Dateitypen identifizieren kann, obwohl sie die „falschen“ Suffixe haben:
Ich brauche also nur ein Skript, das die Dateien markiert, damit ich Automator verwenden kann, um die Dateien später mit dem entsprechenden Suffix umzubenennen.
Ich stelle fest, dass, wenn ich in Terminal „Datei“ eingebe und danach mehrere Dateien darauf ablege oder kopiere und die Eingabetaste drücke, Terminal sie alle in derselben Reihenfolge korrekt identifiziert, aber es ist nicht nützlich, es sei denn, es markiert zumindest jeder Dateityp anders.
Ich denke, diese anfängliche Aufgabe ist zu schwierig für Automator, würde aber gerne widerlegt werden.
Jede Unterstützung dabei wäre willkommen. Ich habe dieses Board und andere Stellen überprüft und erwartet, dass jemand anderes ein ähnliches Problem hatte, aber ich habe nirgendwo ein solches Problem gefunden.
Dies ist ziemlich einfach, indem Sie einige Standardwerkzeuge kombinieren:
file
zum Nachschlagen des Mime-Typstr
um die Schrägstriche zu entfernen (andernfalls hätten Sie verschachtelte Ordner für verschiedene Dateigruppen)mkdir
und mv
Befehlefor file in *
do
mime=$(file --brief --mime-type "$file" | tr '/' '_')
mkdir -p "$mime"
mv "$file" "$mime/$file"
done
Alternativ könnten Sie auch Dateierweiterungen für jeden erwarteten Mime-Typ direkt auflisten und automatisch entsprechend umbenennen.
for file in *
do
mime=$(file --brief --mime-type "$file")
case "$mime" in
"image/jpeg")
extension="jpeg"
;;
"text/plain")
extension="txt"
;;
"application/pdf")
extension="pdf"
;;
*)
continue;
;;
esac
filename="${file%.*}"
mv "$file" "$filename.$extension"
done
Beachten Sie, dass ich aus Gründen der Lesbarkeit nicht auf Dateinamen geachtet habe, die Leerzeichen enthalten. Wenn Sie sie haben, müssen Sie eines der Muster anwenden, um mit Leerzeichen in Dateinamen umzugehen . Da es eher so aussieht, als hättest du sie nicht, habe ich sie weggelassen, da sie die Skripte viel komplizierter aussehen lassen, als sie sind.
Benutzer3439894
application_x-directory
und das ist meiner Meinung nach nicht gut. Es sollte so codiert werden, dass es keine Verzeichnisse verarbeitet. Sie bemerken auch "Beachten Sie, dass ich aus Gründen der Lesbarkeit nicht auf Dateinamen geachtet habe, die Leerzeichen enthalten." Ich finde jedoch, dass beide bei Dateinamen mit Leerzeichen richtig funktionieren.Jens Erat
-type f
umfind
Verzeichnisse auszuschließen.Benutzer3439894
if [[ ! -d "$file" ]]; then ...
hätte ich dafür gestimmt.Steve K
kopischke
$file
wie es die Beispielskripte tun (siehe die BashFAQ für Details darüber, warum dies so ist). Der relevante Absatz und Link müssen entfernt werden, da sie sowohl irrelevant als auch von der Antwort ablenken.