选择“阈值”之间的所有文件

时间:2017-03-01 15:38:51

标签: bash shell

在我的目录中,我有一个像这样的文件列表(已排序):

A.txt
B.txt
...
Z.txt

在变量min_thresholdmax_threshold中,我有文件名,它代表我想要复制的文件范围(例如,在C.txt和K.txt之间)。我问是否有办法选择一系列已排序的文件(使用文件名),而不使用while read

我正在使用此选项:

files_names=$(ls $dir | sort | cut -d 'C.txt' -f 2)
files_names=$(echo $files_names | sort | cut -d 'K.txt' -f 1)

但剪切仅适用于角色。也许我应该使用查找并用文字替换文件名。

2 个答案:

答案 0 :(得分:0)

您可以使用eval执行此操作,但必须确保您将执行的内容,因为eval可以执行恶意代码:

$ ls *.txt
c.txt  d.txt  e.txt  f.txt
$ min="c.txt";max="e.txt"
$ ext="${min#*.}"     #Get the extension
$ minn="${min%.*}";maxn="${max%.*}"   #get everything before the extension (c and e)
$ eval ls "{$minn..$maxn}"."$ext"   # executed as ls {c..e}.txt
c.txt  d.txt  e.txt 

答案 1 :(得分:0)

由于ls按排序顺序列出文件,因此不清楚您需要sort之后的文件。但是,假设名称是“正常”(名称中没有空格,换行符,制表符),则:

file1="C.txt"
file2="K.txt"
filenames=$(ls | sort | sed -n "/$file1/,/$file2/p")