gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:36 25 4
gpt4 key购买 nike

我有一个包含 10000 个 .root 文件的目录(每个看起来都像 hists11524_blinded.roothists9899_blinded.root)并且需要为我的数据分析目的运行一些宏。但是,我不需要所有文件(总共只有 4000 个)都在目录中。我在 thebest.txt 文件 中有一个所需运行的列表(这 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

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

最佳答案

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

关于linux - 我的笔记本电脑上有一堆上传的 .root 文件,但我只需要特定的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56853464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com