můžete použít detox
od Douga Harplea
detox -r <folder>
Použijte rename
(také znám jako prename
), což je skript v Perlu, který již může být ve vašem systému. Udělejte to ve dvou krocích:
find . -name "* *" -type d | rename 's/ /_/g' # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'
Na základě Jürgenových odpověď a schopnost zpracovat více vrstev souborů a adresářů v jedné vazbě pomocí verze /usr/bin/rename
"Revision 1.5 1998/12/18 16:16:31 rmb1" (perlovský skript):
find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;
Používám:
for f in *\ *; do mv "$f" "${f// /_}"; done
I když to není rekurzivní, je to docela rychlé a jednoduché. Jsem si jistý, že by to někdo mohl aktualizovat, aby byl rekurzivní.
${f// /_}
část využívá bashův mechanismus rozšíření parametrů k nahrazení vzoru v parametru dodaným řetězcem. Relevantní syntaxe je ${parameter/pattern/string}
. Viz:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html nebo 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
napoprvé se mi to nepodařilo správně, protože mě nenapadly adresáře.