我目前的工作目录中有3个文件,如下所示:
abc def xyz.tgz
ghi jkl xyz.tgz
def klm zxc.tgz
我希望重命名文件,以便空格应替换为下划线。为实现这一目标,我使用了以下方法:
rename -v 's/\ /_/g' *tgz
以下是问题:
当目录只包含一个tgz文件时,会出现如下错误:
rename: not enough arguments
如果我使用以下内容:
rename " " "_" *.tgz
只有一个空格被替换为下划线。
答案 0 :(得分:4)
您的系统似乎提供了其他rename,它不支持Perl的替换。你仍然可以使用它:
while ls *' '*tgz &> /dev/null ; do
rename ' ' _ *' '*tgz || break
done
或者只使用mv
参数扩展:
for file in *' '*tgz ; do
mv "$file" "${file// /_}"
done
答案 1 :(得分:0)
此代码将找到当前目录中的所有文件或目录,并用下划线替换其文件名中的所有空格:
find . -name '* *' -exec bash -c 'mv -v "$0" "`echo $0 | tr " " "_"`"' {} \;