5

我正在尝试将多个文件重命名xyz[n]为扩展名xyz

例子 :

mv *.xyz[1] to *.xyz

但错误来了 -" *.xyz No such file or directory"

4

4 回答 4

5

不知道 mv 是否可以直接使用 * 但这会起作用

find ./ -name "*.xyz\[*\]" | while read line
do 
mv "$line" ${line%.*}.xyz
done
于 2012-12-20T08:13:02.220 回答
2

假设我们有一些文件,如下所示。现在我想从这些文件中删除部分 -(ab...)。

> ls -1 foo*
foo-bar-(ab-4529111094).txt
foo-bar-foo-bar-(ab-189534).txt
foo-bar-foo-bar-bar-(ab-24937932201).txt

所以预期的文件名是:

> ls -1 foo*
foo-bar-foo-bar-bar.txt
foo-bar-foo-bar.txt
foo-bar.txt
> 

下面是一个简单的方法。

> ls -1 | nawk '/foo-bar-/{old=$0;gsub(/-\(.*\)/,"",$0);system("mv \""old"\" "$0)}'

有关详细说明,请在此处查看

于 2013-01-10T06:33:05.343 回答
0

这是使用StringSolver自动化工具的另一种方法。假设您的第一个文件被命名abc.xyz[1]为第二个命名def.xyz[1]和第三个命名ghi.jpg(与前两个不同的扩展名)。

首先,通过给出示例过滤您想要的文件(ok 和 notok 是第一个描述接受的文件的任何词):

filter abc.xyz[1] ok def.xyz[1] ok ghi.jpg notok

然后使用它创建的过滤器执行移动:

mv abc.xyz[1] abc.xyz
mv --filter --all

第二行概括了所有以.xyz[1].

最后两行也可以缩写为一行,它执行动作并立即将其概括:

mv --filter --all abc.xyz[1] abc.xyz

免责声明:出于学术目的,我是该作品的合著者。其他示例可在youtube上找到。

于 2014-03-13T14:46:45.130 回答
0

我认为 mv 不能在没有循环的情况下直接对多个文件进行操作。请改用重命名命令。它使用正则表达式,但一旦掌握就易于使用且功能更强大。

rename 's/^text-to-replace/new-text-you-want/' text-to-replace*

例如,将目录中的所有 .jar 文件重命名为 .jar_bak

rename 's/^jar/jar_bak/' jar*
于 2018-04-06T16:04:24.670 回答