Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 未使用重命名命令重命名的文件_Shell_Unix_Rename - Fatal编程技术网

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

Shell 未使用重命名命令重命名的文件,shell,unix,rename,Shell,Unix,Rename,我的当前工作目录中有3个文件,如下所示: abc def xyz.tgz ghi jkl xyz.tgz def klm zxc.tgz rename: not enough arguments 我希望重命名这些文件,以便用下划线替换空格。为此,我采用了以下方法: rename -v 's/\ /_/g' *tgz 以下是问题: 命令执行时不会出现任何错误,但不会重命名任何文件 当目录仅包含一个tgz文件时,会出现如下错误: abc def xyz.tgz ghi jkl xyz.tgz

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

abc def xyz.tgz
ghi jkl xyz.tgz
def klm zxc.tgz
rename: not enough arguments
我希望重命名这些文件,以便用下划线替换空格。为此,我采用了以下方法:

rename -v 's/\ /_/g' *tgz
以下是问题:

  • 命令执行时不会出现任何错误,但不会重命名任何文件
  • 当目录仅包含一个tgz文件时,会出现如下错误:

    abc def xyz.tgz
    ghi jkl xyz.tgz
    def klm zxc.tgz
    
    rename: not enough arguments
    
  • 如果我使用以下选项:

    rename " " "_" *.tgz
    
    只有一次出现的空格替换为下划线


  • 您的系统似乎提供了另一个,它不支持Perl的替代。您仍然可以使用它:

    while ls *' '*tgz &> /dev/null ; do
        rename ' ' _  *' '*tgz || break
    done
    
    或者只需使用带有参数扩展的
    mv

    for file in *' '*tgz ; do
        mv "$file" "${file// /_}"
    done
    

    此代码将查找当前目录中的所有文件或目录,并用下划线替换其文件名中的所有空格:

    find-名称'**'-execbash-c'mv-v“$0”“`echo$0 | tr”“”{};
    
    您的
    重命名是perl
    重命名
    还是util linux
    重命名
    还是其他什么?它看起来像是util linux
    rename
    (),它不支持
    s/../…/
    ls-l$(重命名)
    没有bash
    rename
    命令。这是一个外部命令,不是shell的一部分,不应该被标记为“bash”。为什么不使用mv命令呢?嗯。我觉得第一个公式循环有点危险。如果
    rename
    失败并以非零状态退出而不重命名任何文件,该怎么办?至少应该在其上放置一个
    | | break
    ,以防止在错误情况下出现无限循环。