任何人都可以推荐一个安全的解决scheme,从给定的根目录开始recursion地replace文件和目录名下划线的空格? 例如,
$树 。 | - 一个dir | ` - 文件与spaces.txt ` - b dir | - 带有spaces.txt的另一个文件 ` - 另一个文件与spaces.pdf
变为:
$树 。 | - a_dir | ` - file_with_spaces.txt ` - b_dir | - another_file_with_spaces.txt ` - yet_another_file_with_spaces.pdf
我已经复制了另一个用户的问题,这是主要问题,但我需要添加另一个问题:
我正在使用下面的解决scheme:
$ find -depth -name '* *' -execdir rename " " "_" {} +;
它的工作原理,但只取代在一个项目(目录或文件)上find的第一个空格。 任何想法如何使循环寻找空间,并停止时,他们都走了?
如果您没有rename
,或者您不确定您拥有哪个版本,则可以通过以下方法来实现:
find . -depth -name '* *' -execdir bash -c 'for i; do mv "$i" "${i// /_}"; done' _ {} +
您可以使用:
find . -depth -name '* *' -execdir rename 's/ /_/g' {} +
这是没有rename
的解决方案
find -type d -name "* *" -print | awk '{print;gsub(" ","_",$0);print}' | xargs -r -n2 -d "\n" mv find -name "* *" -print | awk '{print;gsub(" ","_",$0);print}' | xargs -r -n2 -d "\n" mv
我假设您的文件名中没有\n
。