Shell 未使用重命名命令重命名的文件
我的当前工作目录中有3个文件,如下所示: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
abc def xyz.tgz
ghi jkl xyz.tgz
def klm zxc.tgz
rename: not enough arguments
我希望重命名这些文件,以便用下划线替换空格。为此,我采用了以下方法:
rename -v 's/\ /_/g' *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 linuxrename
(),它不支持s/../…/
ls-l$(重命名)
没有bashrename
命令。这是一个外部命令,不是shell的一部分,不应该被标记为“bash”。为什么不使用mv命令呢?嗯。我觉得第一个公式循环有点危险。如果rename
失败并以非零状态退出而不重命名任何文件,该怎么办?至少应该在其上放置一个| | break
,以防止在错误情况下出现无限循环。