Meine Frau benennt Dateien beim Speichern auf ihrem externen Backup-Speicher ständig mühsam um, also habe ich untersucht, ob ich Automator verwenden kann, um dies für sie zu tun. Ich habe jetzt einen Automator-Ordner, in dem sie die Datei einfach dort ablegt und die Datei entsprechend umbenennt.
Ich bin jetzt mit einer Situation konfrontiert, in der die Datei möglicherweise führende und/oder nachgestellte Leerzeichen enthält. Wie kann ich diese Leerzeichen einfach kürzen?
Ich habe AppleScript noch nie wirklich verwendet, bin aber mit Shell-Skripten vertraut. Kann ich einfach ein Shell-Skript schreiben, das diese Aufgabe erfüllt? Ich werde AppleScript ausprobieren, wenn mich jemand in die richtige Richtung weisen könnte.
for f in "$@"; do new="$(echo -n "$f" | sed -E 's|/$||;s| +$||;s|^ +||;s|/ +([^/]+$)|/\1|;s| +(\.[^.][a-zA-Z0-9.]*)$|\1|g')"; mv "$f" "$new"; echo "$new"; done
(Als Aktion „Shell-Skript ausführen“ einfügen und Eingabe übergeben: als Argumente auswählen .)
s|/$||;s| +$||;s|^ +||;s|/ +([^/]+$)|/\1|;s| *\. *([^\.]+)$|\.\1|;
Wir können andere Zeichen in der Erweiterung zulassen und wir möchten auch nicht, dass die Erweiterung mit einem Leerzeichen beginnt.s| *\. *([^.]+)$|\.\1|
würde EOL + . + LF.plist
durch ersetzen EOL +.+ LF.plist
. Es würde keinen Einfluss haben some .tar.gz
.some .tar.gz
wird some..tar.gz
). Das Entfernen des Punkts funktioniert, verhindert aber nicht, dass das Leerzeichen in der Erweiterung am Anfang erscheint. Es genügt zu sagen, dass es nicht allzu wichtig ist, diese Dinge sind trivialer und können für immer in Frage gestellt werden.Dafür gibt es ein Zeilenskript, cd in diesen Ordner und ...
for f in *; do mv "$f" "$(echo $f)"; done
Fügen Sie es in ein Shell-Skript ein und rufen Sie es von Applescript aus auf:
tell application "Terminal"
do script "whatever"
end tell
echo $f | cut -b 1-
"; getan Mann geschnittenfor f in *; do mv "$f" "$(echo $f)"; done
cut
hat dann überhaupt
nichts damit zu tun .for f in "$@"; do echo mv "$f" "$(echo $f)" ; done
passender?*
bezieht sich auf jede Datei (oder jedes Verzeichnis) in der pwd
, also ist nichts Ausführlicheres erforderlich. echo
Wenn Sie dies tun, stellen Sie außerdem sicher, dass Sie das in nicht do echo mv "$f"
wie in Ihrem Kommentar verwenden, da Sie sonst nur echo
das tun, was Sie tun möchten, anstatt es tatsächlich zu tun.for f in *; do mv "$f" $f; done
*
. Das richtige Skript wäre eigentlich so, wie ich es erwähnt habe, aber mit einem Extra echo
des resultierenden Dateinamens als Standard, um alle anderen Aktionen in der Aktionskette beizubehalten/zuzulassen, ohne dass nichts in die nächste Aktion einfließen würde.Für eine korrekte Antwort, die auf der Antwort von Tuan basiert, wird Folgendes benötigt, wodurch nicht nur die Datei umbenannt wird, sondern auch die Aktionskette für nachfolgende Aktionen erhalten bleibt.
Beachten Sie auch, dass wir den übergeordneten Ordner in keiner Weise umbenennen möchten, sondern nur die Dateien.
for f in "$@" ; do
dirname=$(dirname "$f")
basename=$(basename "$f")
name=${basename%.*}
ext=${basename##*.}
name="$(echo "$name" | sed -Ee 's/^ +//;s/ +$//')"
new="$dirname/$name.$ext"
mv "$f" "$new"
echo "$new"
done
Sie müssen dies auch nicht in ein Shell-Skript selbst einfügen, Automator kann dies in die Aktion "Run Shell Script" einbetten.
Ich wollte auch nachlaufende Leerzeichen aus Datei- und Ordnernamen entfernen. Dieser Super-User-Beitrag hat mir geholfen.
Es gibt ein AppleScript (sehr ähnlich zu Automator), das Dateinamen kürzt. Es ist ein bisschen lang, also kann ich es hier nicht posten, aber hier ist ein Link zum Code. Stellen Sie sicher, dass Sie den Anfang des Codes lesen, da er erklärt, was das Skript macht und wie es funktioniert.
Kassym Dorsel
Joe J