在我的目录中,我有一个像这样的文件列表(已排序):
A.txt
B.txt
...
Z.txt
在变量min_threshold
和max_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)
但剪切仅适用于角色。也许我应该使用查找并用文字替换文件名。
答案 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")