开发者社区> 问答> 正文

我的笔记本电脑上有一堆上载的.root文件,但是我只需要特定的文件

我有一个包含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。

两个列表中的位数不同-这是主要问题。

展开
收起
祖安文状元 2020-01-06 16:23:55 564 0
1 条回答
写回答
取消 提交回答
  • 一种选择是从数字中删除前导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。

    2020-01-06 16:24:06
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载