我有一个包含10000个.root文件的目录(每个文件看起来像hists11524_blinded.root或hists9899_blinded.root),并且需要运行一些宏以进行数据分析。但是,我不需要所有文件(总共只有4000个)在目录中。我在中列出了所需的跑步次数(这些4000个数字)thebest.txt file。该文件也位于带有直方图的目录中。
我想通过使用.txt文件中的信息来删除在运行宏之前不需要进行处理的文件。
这就是thebest.txt文件的样子:
09769
09772
09773
09776
09777
09781
09782
09785
09786
09789
09790
09793
...
我的猜测是使用命令:
-comm -2 -3 <(ls) <(sort thebest) | tail +2 | xargs -p rm
我收到2个错误:
tail: invalid option -- 'p'
sort: cannot read: No such file or directory
该文件thebest.txt仅包含5位数字,如09999或11256,目录包含名称为hists9999_blinded.root或的文件hists11256_blinded.root。
两个列表中的位数不同-这是主要问题。
一种选择是从数字中删除前导0以匹配文件名。为避免匹配子字符串,您可以在前面和后面添加相应的文件名部分。(在您的情况下,文件名中间应有数字。)
由于尚不清楚示例文件thebest.txt中的前导空格是故意的还是仅是格式问题,因此也将删除前导空格。
由于删除错误的文件可能会导致数据丢失,因此您也可以考虑仅处理匹配的文件,而不是删除不匹配的文件。
# remove leading spaces followed by leading zeros and prepend/append file name parts
sed 's/ *0*\([1-9][0-9]*\)/hists\1_blinded.root/' thebest.txt > thebestfiles.txt
# get matching files and process
find . -name 'hists*_blinded.root' | fgrep -f thebestfiles.txt | xargs process_matching
# or get non-matching files and remove
find . -name 'hists*_blinded.root' | fgrep -v -f thebestfiles.txt | xargs rm
该find命令在当前目录中递归搜索。如果要排除子目录,可以使用-maxdepth 1。为了避免处理目录名称,您还可以添加-type f。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。