2012-04-11 43 views
0

我想在文本文件列表上執行bash腳本(使用for循環,我猜),將stdout重定向到一個文件與stdin中的文本文件相同的路徑加上一個擴展名(例如.txt或.sam,或者只是在stdin路徑的末尾添加〜以使其不同)。對stdin上的文件列表執行bash命令並將stdout重定向到相關文件

+0

我迷路了,你能舉一個你想要完成的例子嗎? – Freddy 2012-04-11 16:46:11

+2

@tripleee你確實觀察到2012年有人問這個問題,並且在2013年提出了你聲稱重複的問題,對吧?我的意思是,你*確實*認爲要檢查日期,以免引起時代錯誤並破壞空間連續體。 – 2015-06-30 06:25:15

+18

@CharlieMartin感謝提問。我沒有注意到,沒有;但問題的年齡是次要問題。不管問題的年齡如何,對問題和/或多個好答案的更好闡述的問題是作爲「重複」目標的更好選擇;而當兩個問題都比較陳舊時,尤其是兩者中的較新者更加規範。 – tripleee 2015-06-30 06:44:22

回答

4

好吧,假設名單不會太長,你可以用

for i in `cat list` 
    do 
     # do stuff here 
    done 

開始如果列表足夠長的太長的命令行的風險,有一段時間變種

cat list | while read i 
    do 
     # do stuff here 
    done 

您可以使用basename(1)構造文件名來擺脫舊的擴展名後綴;對於說.TXT爲.bak使用

`basename .txt ${i}`.bak 

您可以使用目錄名(1)

由於宏年初展開,你可以簡單地構建變量的命令行和擴大他們獲取路徑的一部分。其中op和NP是你的路徑名

command < $op > $np 

有一個可愛的在線書,覆蓋此多的bash Advanced Scripting Guide

+0

http://mywiki.wooledge.org/DontReadLinesWithFor顯然,'cat'是[無用的](http://www.iki.fi/era/unix/award.html)。 – tripleee 2015-06-30 04:26:05

+0

另請參閱http://wiki.bash-hackers.org/scripting/tutoriallist#rv_abs關於ABS指南的一些(非常溫和的)注意事項。共識是,它不應該成爲您的腳本建議的第一站。鏈接頁面推薦一些其他教程(向後滾動幾個凹槽)。 – tripleee 2015-06-30 04:27:49

+3

也許後續元:http://meta.stackoverflow.com/questions/298192/disagreement-on-duplication-action – tripleee 2015-06-30 06:42:59

相關問題