2015-03-19 28 views
0

我想在file.idx從移動文件哪個列表Scattered/Selected

for ((i=1; i<100; i=i+1)) 
do 
    mv "Scattered/$(sed '$i q;d' file.idx)" "Selected/" 
done 

不過Bash shell中沒有1更換$i至100,並給出了此錯誤:

sed: -e expression #1, char 2: unknown command: `i' 
Scattered/ Selected/ 

回答

3

您的sed命令使用單引號,因此shell變量將不會被展開。使用雙引號來代替:

mv "Scattered/$(sed "$i q;d" file.idx)" "Selected/" 

順便說一句,在你的問題你提到從1要100,但你的循環結束目前在99

你能避免使用SED完全通過在文件循環bash是這樣的:

while read -r line; do 
    mv "Scattered/$line" "Selected/" 
done < file.idx 

這種方法效率更高,重複調用sed只是爲了提取一條線。如果file.idx中有超過100行,則可以隨時添加附加條件:

c=0 
while read -r line && ((c++ < 100)); do 
    mv "Scattered/$line" "Selected/" 
done < file.idx