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

时间:2019-07-02 13:20:42

标签: linux histogram root

我的目录中包含10000个.root文件(每个文件看起来像hists11524_blinded.roothists9899_blinded.root),并且需要运行一些宏以进行数据分析。但是,我不需要所有文件(总共只有4000个)在目录中。我在thebest.txt file中列出了所需的跑步次数(这些4000个数字)。该文件也位于带有直方图的目录中。

我想通过使用.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位数字,例如0999911256,目录中包含名称为hists9999_blinded.roothists11256_blinded.root的文件。

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

1 个答案:

答案 0 :(得分:0)

一种选择是从数字中删除前导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