未使用重命名命令重命名的文件

abh*_*air -1 unix shell rename

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

abc def xyz.tgz
ghi jkl xyz.tgz
def klm zxc.tgz
Run Code Online (Sandbox Code Playgroud)

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

rename -v 's/\ /_/g' *tgz
Run Code Online (Sandbox Code Playgroud)

以下是问题:

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

    rename: not enough arguments
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果我使用以下内容:

    rename " " "_" *.tgz
    
    Run Code Online (Sandbox Code Playgroud)

    仅出现一次空格被下划线替换。

cho*_*oba 6

Your system seems to provide the other rename, which doesn't support Perl's substitution. You can still use it:

while ls *' '*tgz &> /dev/null ; do
    rename ' ' _  *' '*tgz || break
done
Run Code Online (Sandbox Code Playgroud)

Or just use mv with parameter expansion:

for file in *' '*tgz ; do
    mv "$file" "${file// /_}"
done
Run Code Online (Sandbox Code Playgroud)

  • 唔。第一个公式循环让我觉得有点危险。如果“重命名”失败并以非零状态退出而不重命名任何文件怎么办?应该放一个`|| 至少,以防止在错误情况下出现无限循环。 (3认同)