2017-03-01 73 views
0

在我的目錄我有這樣的文件列表(排序)之間的所有文件:選擇「門檻」

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) 

但切只適用於字符。也許我應該使用查找並用一個字符替換文件名。

+1

您試過了什麼?我們大多數人都很樂意幫助你改進自己的技藝,但不願意擔任短期無償編程人員。讓我們看看你的工作在你期待的[MCVE(http://stackoverflow.com/help/mcve),結果,你得到的結果,到目前爲止,我們將幫助你找到答案。 – ghoti

+0

@ghoti感謝您的反饋 –

+0

@JoãoCardoso:爲什麼行'不使用while read',所以你已經試過了,不想要它? – Inian

回答

0

由於ls名單中排序順序的文件,目前尚不清楚的是之後你需要sort。但是,假設名稱爲「正常」(名稱中沒有空格,換行符和製表符),則:

file1="C.txt" 
file2="K.txt" 
filenames=$(ls | sort | sed -n "/$file1/,/$file2/p") 
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