2013-02-15 30 views
0

我有一個目錄中的文件的以下體系結構。在子目錄中的文件上執行程序

Directory 
    /A/abc.xyz 
    /B/abc.xyz 
    /C/abc.xyz 
    /D/abc.xyz 
    /E/abc.xyz 

我想在每個子目錄中的acb.xyz上執行一個程序。將輸出文件保存在不同的目錄中,即Directory/processed,輸出文件的名稱中添加了子目錄的名稱。 它可以用以下方式編寫嗎?需要更正。

for i in `ls "Directory/"` 
do 
    program.pl $i/abc.xyz > processed/$i-abc.xyz 
done 
+0

是不是有什麼毛病你寫的是什麼? – 2013-02-15 05:54:13

+0

我明白了,謝謝@JohnKugelman。在輸入和輸出中加入「」可解決問題。 – SNA 2013-02-15 06:24:43

+0

您還需要在進入循環之前創建「processed」目錄 – SNA 2013-02-15 14:58:16

回答

2
for dir in Directory/*; do 
    program.pl "$dir/abc.xyz" > "processed/${dir##*/}-abc.xyz" 
done 

${dir##*/}部分來自$dir剝離領先的目錄名,所以Directory/A就像變成A。我添加了引號,以確保帶有空格的目錄名稱不會造成問題(即使知道不存在空格也是一個好習慣)。

至於改寫(munging),你可以簡化這個,如果你第一次更改目錄的替代字符串:

cd Directory 

for dir in *; do 
    program.pl "$dir/abc.xyz" > "processed/$dir-abc.xyz" 
done 
相關問題