我有一个目录,其中包含一些无意义的命名文件,例如:
apple_2020-01-01.txt
apple_2020-01-02.txt
orange_2020-01-01.txt
pear_2020-01-02.txt
pear_2020-01-03.txt
pear_2020-01-04.txt
我想使用 bash 脚本根据文件上的时间戳创建一些新文件,每个唯一时间戳一个文件。
我可以做出一些假设:
1) 文件名将始终遵循 fruit_*.txt 的格式
2) 文件将被命名为 apple、orange 或 pear
3) 时间戳将始终采用 YYYY-MM-DD 格式。
基于上述示例文件,我希望脚本将创建以下文件:
NewFile_2020-01-01.txt
NewFile_2020-01-02.txt
NewFile_2020-01-03.txt
NewFile_2020-01-04.txt
我怎样才能做到这一点?
对于每个文件,我们删除前导部分直到下划线字符,因此只留下时间戳和扩展名,然后
NewFile_
添加到结果中。touch
如果它试图创建一个已经存在的文件,它不会抱怨。如果下划线后有空格,此解决方案也将起作用。
使用 shell glob 获取文件名(如果没有,这将失败,并且有数万个可能是问题),使用 sed 更改名称,然后使用 sort -u 删除重复项。
最后将它们提供给 xargs touch 以根据 OP 的澄清评论创建文件。
ls *.txt | cut -f2- -d_ | sort -u | xargs -IX touch NewFile_X
cut
给出带有分隔符的第二个“字段”_
sort
排序和删除欺骗(u
nique)xargs
运行命令touch
并替换X
为其他命令