【问题标题】:How to use mv command to rename multiple files in unix?如何使用 mv 命令重命名 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:是的,我确定扩展名只是这个

标签: unix command rename mv


【解决方案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*
      

      【讨论】:

        猜你喜欢
        • 2015-07-19
        • 1970-01-01
        • 2018-04-11
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        相关资源
        最近更新 更多