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