【问题标题】:How to rename text files according to their content?如何根据内容重命名文本文件?
【发布时间】:2011-12-06 00:49:18
【问题描述】:

我的操作系统是 Ubuntu;我有一个包含文本文件的目录;每个文件都包含一个具有唯一 ID 的行

IDtag ID号

文本文件中的行位置是随机的,但是,很容易识别它是简单的正则表达式

^IDtag ID[0-9]*

如何根据 ID 重命名文件? IE。每个文件都必须获得一个新名称 IDnumber.txt 我可以运行 Linux shell 脚本或 Perl 脚本。

【问题讨论】:

    标签: linux file rename


    【解决方案1】:

    先试试这个

    for i in a b c; do echo mv $i `egrep -m1 -e 'IDtag ID[0-9]*' $i | sed -e 's/IDtag ID//'`; done
    

    如果mvs 是正确的 - 删除回显位

    【讨论】:

    • 这是对 Ed Heal 命令的注释:for i in a.txt b.txt c.txt;回声 mv $i egrep -m1 -e 'IDtag ID[0-9]*' $i | sed -e 's/IDtag ID//';完成后它会返回类似 mv a.txt mv b.txt mv a.txt 的消息,如果删除了“echo”,它会将文件重命名为它们的 IdNumbers
    • 我把echo放进去,你可以先检查一下。当然,您可以将 a b c 更改为 *.txt - 或您想要的任何 glob。
    • 我明白了。再次感谢您的快速回复。我在谷歌上搜索了半天,但没有成功尝试创作这样的东西。你能为初学者推荐一些经过时间考验的 Linux 命令教程/指南吗?我对这种环境完全陌生
    • @Novice735 - 只需阅读 Bash 的手册页 - 然后 f**k 几次。你只会从错误中学习。
    【解决方案2】:

    听起来像是功课。 但我会部分回答你的问题。 下面将给出重命名文件要执行的所有命令的列表。

    grep ^IDtag * | awk '{split($1,a,":");print "mv",a[1], $2".txt"}'
    
    ivory.192> grep ^IDtag * | awk '{split($1,a,":");print "mv",a[1], $2".txt"}'
    mv 000001 000001.txt
    mv temp2 000002.txt
    ivory.193> 
    

    将其放入 for 循环并执行 shell 脚本中的每一行。

    此外,您还可以将输出重定向到文件并授予文件执行权限并将其作为脚本执行。这将达到您的目的,此外,您还拥有重命名的文件列表。

    【讨论】:

    • 谢谢拉胡尔!您的命令在我的计算机上运行,​​重定向输出以进行跟踪的想法很有用。
      以防万一,故事是-我得到了某人通过合并许多单个文件创建的大文件,现在我想恢复它们。命令 csplit 帮助我恢复文件,而不是文件名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2012-11-05
    相关资源
    最近更新 更多