在 directory/bash 脚本中从大量文件中仅选择少数文件
Selecting only few files from large no of files in a directory/bash script
我有一个非常简单的问题,我在一个目录中有 10,000 个文件,名称为 simulations_0.root
到 simulations_9999.root
。
我想将 500 个文件合并在一起,使它们的大小更大。我需要 运行 hadd
,selecting simulations_0.root
到 simulations_499.root
; simulations_500.root
到 simulations_999.root
等等。
hadd
将多个输入文件作为命令行参数:
Synopsis
hadd outputfile inputfiles ...
我的问题是如何在 hadd
命令中一次 select 那些从 0 到 500 的文件?
您可以为此使用大括号扩展。
示例:
[user@host dir]$ bash -x
[user@host dir]$ echo foo{1..10}
+ echo foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10
foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10
正如您在上面使用 bash -x
的示例中看到的,表达式 foo{1..10}
将扩展为 space 个分隔参数。
在您的特定情况下,命令为:
hadd output_file.root simulations_{1..500}.root
进一步使用@mashuptwice 方法:
#!/bin/bash
min=0 max=9999 incr=500
for (( i = min, j = min + incr - 1; j <= max; i += incr, j+= incr))
do
declare -a "files=( simulations_{$i..$j}.root )"
hadd "simulations_${i}to$j.root" "${files[@]}"
done
我有一个非常简单的问题,我在一个目录中有 10,000 个文件,名称为 simulations_0.root
到 simulations_9999.root
。
我想将 500 个文件合并在一起,使它们的大小更大。我需要 运行 hadd
,selecting simulations_0.root
到 simulations_499.root
; simulations_500.root
到 simulations_999.root
等等。
hadd
将多个输入文件作为命令行参数:
Synopsis
hadd outputfile inputfiles ...
我的问题是如何在 hadd
命令中一次 select 那些从 0 到 500 的文件?
您可以为此使用大括号扩展。
示例:
[user@host dir]$ bash -x
[user@host dir]$ echo foo{1..10}
+ echo foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10
foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10
正如您在上面使用 bash -x
的示例中看到的,表达式 foo{1..10}
将扩展为 space 个分隔参数。
在您的特定情况下,命令为:
hadd output_file.root simulations_{1..500}.root
进一步使用@mashuptwice 方法:
#!/bin/bash
min=0 max=9999 incr=500
for (( i = min, j = min + incr - 1; j <= max; i += incr, j+= incr))
do
declare -a "files=( simulations_{$i..$j}.root )"
hadd "simulations_${i}to$j.root" "${files[@]}"
done