我的操作系统是Ubuntu;我有一个包含文本文件的目录;每个文件包括具有唯一ID的线如何根据内容重命名文本文件?
IDTAG的ID号
的行位置是一个文本文件内随机的,但是,它是容易识别它是简单的regex
^IDTAG ID [0-9 ] *
如何根据ID重命名文件?即每个文件都必须获取一个新名称IDnumber.txt 我可以运行Linux shell脚本或Perl脚本。
我的操作系统是Ubuntu;我有一个包含文本文件的目录;每个文件包括具有唯一ID的线如何根据内容重命名文本文件?
IDTAG的ID号
的行位置是一个文本文件内随机的,但是,它是容易识别它是简单的regex
^IDTAG ID [0-9 ] *
如何根据ID重命名文件?即每个文件都必须获取一个新名称IDnumber.txt 我可以运行Linux shell脚本或Perl脚本。
尝试这样做,第一
for i in a b c; do echo mv $i `egrep -m1 -e 'IDtag ID[0-9]*' $i | sed -e 's/IDtag ID//'`; done
如果mv
s为正确的 - 去除回声位
听起来像是一门功课。 但我会部分回答你的问题。下面的 将给出要执行的所有命令的列表以重命名文件。
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脚本中的每一行。
另外有一个轨道,你可以重定向输出到一个文件,并给予文件执行权限,并执行它作为一个脚本。这将做你的目的另外,你也有重命名文件的列表。
谢谢Rahul!你的命令在我的电脑上工作,并且重定向输出用于跟踪的想法很有用。
为了以防万一,故事是 - 我收到了一些通过合并许多单个文件而创建的大文件,现在我想恢复它们。命令csplit帮助我恢复文件,而不是文件名。 –
Novice735
感谢Ed Heal!有用! – Novice735
这是Ed Heal命令的注释: for i in a.txt b.txt c.txt;做echo mv $ i'egrep -m1 -e'IDtag ID [0-9] *'$ i | sed -e's/IDtag ID //'';完成 它返回像 消息MV A.TXT MV b.txt MV A.TXT 如果 “回声” 删除,它重命名文件到它们的Id数字 –
Novice735
我把'回声',所以你可以先检查。当然,您可以将b c更改为* .txt - 或者您想要的任何glob。 –