查找/重命名命令不起作用

查找/重命名命令不起作用

我使用的是Linux Slackware 14.0,bash 4.2。假设我的目录中有2个文件:

bash-4.2$ ls
1.txt  2.txt

我想将它们重命名为 .svg。这个答案被接受并被投票,所以我认为,它一定有效。他使用了这个命令:

find . -name "*.andnav" -exec rename -v 's/\.andnav$/\.tile/i' {} \;

因此,我编写了类似的命令,但它打印了一个错误:

bash-4.2$ find . -name "*.txt" -exec rename -v 's/\.txt$/\.svg/i' {} \;
rename: not enough arguments

当我只想打印文件时,它可以工作:

bash-4.2$ find . -name "*.txt" -print
./1.txt
./2.txt

我知道,我可以用更简单的方法重命名:

bash-4.2$ rename .txt .svg ./*.txt
bash-4.2$ ls
1.svg  2.svg

但为什么命令不来自回答对我有用吗?

答案1

renameLinux 发行版上有两个命令被调用。有基本 Linux 实用程序之一,其用法如下:

rename SUBSTRING REPLACEMENT FILE...

此命令将每个指定文件中第一次出现的 SUBSTRING 替换为 REPLACMENT。它仅支持纯字符串,不支持通配符或正则表达式。在 Debian 及其衍生版本(Ubuntu、Mint 等)上,此命令称为rename.ul.在其他 Linux 发行版上,它称为rename.

还有一个Perl 脚本调用rename其用法如下:

rename 'PERL CODE' FILE...

Perl 代码的常见形式是rename 's/REGEXP/REPLACEMENT/' FILE...,它将每个文件名中第一次出现的 REGEXP 替换为 REPLACMENT(s/REGEXP/REPLACEMENT/g替换所有出现的情况)。

作者是你看到的问题表明他正在运行 Ubuntu,因此他接受了这个答案使用renameUbuntu 上的命令。

标准rename命令的类似命令是

find . -name "*.txt" -exec rename .txt .svg {} \;

当 bash ≥4 时,您可以使用**通配符模式设置后globstar选项匹配子目录中的文件而不使用find.

shopt -s globstar
rename .txt .svg **/*.txt

请注意,此rename命令作用于第一个字符串,因此如果您有一个名为 的文件hello.txt.world.txt,它将被重命名为hello.svg.world.txt.

相关内容