Sie können detox
verwenden von Doug Harple
detox -r <folder>
Verwenden Sie rename
(auch bekannt als prename
), bei dem es sich um ein Perl-Skript handelt, das sich möglicherweise bereits auf Ihrem System befindet. Tun Sie es in zwei Schritten:
find . -name "* *" -type d | rename 's/ /_/g' # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'
Basierend auf Jürgens Antwort und in der Lage, mehrere Ebenen von Dateien und Verzeichnissen in einer einzigen Bindung mit der "Revision 1.5 1998/12/18 16:16:31 rmb1"-Version von /usr/bin/rename
zu handhaben (ein Perl-Skript):
find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;
Ich verwende:
for f in *\ *; do mv "$f" "${f// /_}"; done
Obwohl es nicht rekursiv ist, ist es ziemlich schnell und einfach. Ich bin sicher, jemand hier könnte es rekursiv aktualisieren.
Die ${f// /_}
part verwendet den Parametererweiterungsmechanismus von Bash, um ein Muster innerhalb eines Parameters durch eine angegebene Zeichenfolge zu ersetzen. Die relevante Syntax ist ${parameter/pattern/string}
. Siehe:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html oder http://wiki.bash-hackers.org/syntax/pe .
find . -depth -name '* *' \
| while IFS= read -r f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _)" ; done
Ich habe es anfangs nicht richtig hinbekommen, weil ich nicht an Verzeichnisse gedacht habe.