Das Problem mit Mac ist, dass es Leerzeichen am Ende der Datei oder des Ordners zulässt. Wenn diese Datei oder dieser Ordner mit Leerzeichen am Ende mit Filezilla oder Dropbox auf FTP kopiert wird, erstellt der Mac Ordner mit "Foldername_WhiteSpaceConflict". Um dieses Problem zu beseitigen, müssen alle Dateien und Ordner mit Leerzeichen ohne Leerzeichen umbenannt werden. Welche Lösung könnte die beste sein, wenn Sie ein Terminal oder ein Programm verwenden?
Hier ist das Skript zum Suchen und Entfernen von nachgestellten Leerzeichen aus Dateien und Verzeichnissen:
#!/bin/bash
IFS=$'\n'
for file in $(find -d . -name "* ")
do
target_name=$(echo "$file" | sed 's/[ \t]*$//')
if [ "$file" != "$target_name" ]; then
if [ -e "$target_name" ]; then
echo "WARNING: $target_name already exists, file not renamed"
else
echo "Move $file to $target_name"
mv "$file" "$target_name"
fi
fi
done
-d
ist hier wichtig, außerdem habe ich ein Häkchen hinzugefügt, um zu verhindern, mv
dass vorhandene Dateien überschrieben werden.Ich musste das Skript noch etwas korrigieren. Bei Dateien oder Ordnern, die mit dem Buchstaben „t“ enden, würde dieser Buchstabe ebenfalls gelöscht. Und der Aufruf zum Überprüfen, ob die Datei existiert, funktionierte nicht richtig, also wurde "target_name" in $target_name geändert und es funktioniert jetzt.
#!/bin/bash
IFS=$'\n'
for file in $(find -d . -name "* ")
do
target_name=$(echo "$file" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
if [ "$file" != "$target_name" ]; then
if [ -e $target_name ]; then
echo "WARNING: $target_name already exists, file not renamed"
else
echo "Move $file to $target_name"
mv "$file" "$target_name"
fi
fi
done
Es gibt eine Anwendung für Mac namens „ Name Mangler “, die alles tut, was Sie mit einem Datei-/Ordnernamen machen können, und Sie können sogar Ihren eigenen Code erstellen und ihn in der App verwenden. Es gibt eine kostenlose Testversion, die Ihnen 4 unbegrenzte Versuche gibt, und Sie können die Namen zurücksetzen, wenn Sie einen Fehler machen.
So etwas sollte funktionieren:
ruby -e "Dir.glob('* ').each { |name| File.rename name, name.chomp(' ') }"
Dadurch werden nachgestellte Leerzeichen aus jeder Datei/jedem Verzeichnis im pwd entfernt.
Die Antwort von Devin Stagner 2016 funktioniert einwandfrei, aber ich habe sie am 20.08.2022 aktualisiert, da sie -d
veraltet ist (jetzt verwendet wird), und dieser Schalter muss auch nach dem gesuchten -depth
Pfad ( ) gehen . .
Hinzugefügt , um $file und $target_name[ ]
einzuschließen , wenn die Informationen über den echo-Befehl angezeigt werden, damit deutlicher wird, was aus dem Dateinamen entfernt wurde.
#!/bin/bash
IFS=$'\n'
for file in $(find . -depth -name "* ")
do
target_name=$(echo "$file" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
if [ "$file" != "$target_name" ]; then
if [ -e $target_name ]; then
echo "WARNING: [$target_name] already exists, file not renamed"
else
echo "Move [$file] to [$target_name]"
mv "$file" "$target_name"
fi
fi
done
james.garriss
Fahrrad