文件未使用rename命令重命名

时间:2016-02-17 20:42:17

标签: shell unix rename

我目前的工作目录中有3个文件,如下所示:

abc def xyz.tgz
ghi jkl xyz.tgz
def klm zxc.tgz

我希望重命名文件,以便空格应替换为下划线。为实现这一目标,我使用了以下方法:

rename -v 's/\ /_/g' *tgz

以下是问题:

  1. 该命令执行时没有任何错误,但没有重命名文件。
  2. 当目录只包含一个tgz文件时,会出现如下错误:

    rename: not enough arguments
    
  3. 如果我使用以下内容:

    rename " " "_" *.tgz
    

    只有一个空格被替换为下划线。

2 个答案:

答案 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 " " "_"`"' {} \;