如何使用 mv 命令重命名 unix 中的多个文件?
Posted
技术标签:
【中文标题】如何使用 mv 命令重命名 unix 中的多个文件?【英文标题】:How to use mv command to rename multiple files in unix? 【发布时间】:2012-12-07 16:50:25 【问题描述】:我正在尝试将扩展名为 xyz[n]
的多个文件重命名为扩展名 xyz
例子:
mv *.xyz[1] to *.xyz
但错误来了 - " *.xyz No such file or directory"
【问题讨论】:
此命令试图将 *.xyz[1] 移动到目录 *.xyz (如果我们忽略中间的“to”,这是无效的:)。这就是为什么它不起作用。您需要一些脚本来执行此操作。 文件扩展名有[
或]
。你确定吗?
感谢大家的回复
@Damien 但简单的 mv abc.xyz[1] abc.xyz 正在工作
@theharshest:是的,我确定扩展名只是这个
【参考方案1】:
不知道 mv 是否可以直接使用 * 工作,但这会工作
find ./ -name "*.xyz\[*\]" | while read line
do
mv "$line" $line%.*.xyz
done
【讨论】:
【参考方案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
【讨论】:
感谢 Sarathi 的回复当我在终端上触发命令时,我收到错误,因为找不到 nawk 命令 确切的 O/P 是“-bash: nawk: command not found” 然后我尝试使用 awk 命令作为 ls -1 |awk '/110X/old=$0;gsub(/[/,"",$0);system("mv \""old"\" "$0)' 我得到了错误“ awk : nonterminated character class [ source line number 1 context is >>> /110X/old=$0;gsub(/[/,"",$0) " 我的文件名类似于 20130110X1YZ.rtf[2] 20130110XYZ.rtf[1] 20130110XYZ1.rtf[2] 我想从 20130110X1YZ.rtf 之类的名称中删除 [n] 值 20130110X1YZ .rtf[2] 您可以尝试使用 awk 而不是我在 solaris 上使用的 nawk.nawk。所以它在 solaris 上有效。【参考方案3】:这是使用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 上提供了其他示例。
【讨论】:
【参考方案4】:我认为 mv 不能在没有循环的情况下直接对多个文件进行操作。 请改用重命名命令。它使用正则表达式,但一旦掌握就易于使用且功能更强大。
rename 's/^text-to-replace/new-text-you-want/' text-to-replace*
例如,将目录中的所有 .jar 文件重命名为 .jar_bak
rename 's/^jar/jar_bak/' jar*
【讨论】:
以上是关于如何使用 mv 命令重命名 unix 中的多个文件?的主要内容,如果未能解决你的问题,请参考以下文章