我正在尝试将多个文件重命名xyz[n]
为扩展名xyz
例子 :
mv *.xyz[1] to *.xyz
但错误来了 -" *.xyz No such file or directory"
不知道 mv 是否可以直接使用 * 但这会起作用
find ./ -name "*.xyz\[*\]" | while read line
do
mv "$line" ${line%.*}.xyz
done
假设我们有一些文件,如下所示。现在我想从这些文件中删除部分 -(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)}'
有关详细说明,请在此处查看
这是使用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上找到。
我认为 mv 不能在没有循环的情况下直接对多个文件进行操作。请改用重命名命令。它使用正则表达式,但一旦掌握就易于使用且功能更强大。
rename 's/^text-to-replace/new-text-you-want/' text-to-replace*
例如,将目录中的所有 .jar 文件重命名为 .jar_bak
rename 's/^jar/jar_bak/' jar*