我正在尝试将扩展名为xyz[n]
的多个文件重命名为扩展名xyz
示例:
mv *.xyz[1] to *.xyz
但是错误显示为 -
" *.xyz 没有这个文件或目录"
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)}'
如需详细解释,请查看此处
- Learner/110X/{old=$0;gsub(/[/,"",$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命令。它使用正则表达式,但一旦掌握就很容易使用且更强大。
rename 's/^text-to-replace/new-text-you-want/' text-to-replace*
rename 's/^jar/jar_bak/' jar*
[
或]
。您确定吗? - theharshest