2014-03-27 35 views
0

我有一個目錄全子目錄看起來像這樣:刪除目錄,Linux的

Track_0000111 
Track_0004444 
Track_0022222 
Track_0333333 
Track_5555555 

我想刪除特定的目錄,如果它們被包含在一個列表中文件「RemoveFromTop6000_reformatted.txt」

文本文件看起來像這樣的內容:

Track_0000111 
Track_0022222 
Track_0333333 

我試着寫一個小的腳本來處理這個問題,但它似乎不工作:

#!/bin/bash 

    for file in cat RemoveFromTop6000_reformatted.txt; do 
     rm -rfv $file 
    done 

不幸的是,這只是刪除文本文件,而不是目錄。有小費嗎?

謝謝!

+1

那麼你的問題解決了我們的答案? – fedorqui

回答

1

無需for,這樣的事情你可以做一個while read ...; do ... done < file就像這樣:

#!/bin/bash 

while read file 
    rm -rfv "$file" 
done < RemoveFromTop6000_reformatted.txt 
2

你忘了在你的呼叫貓後引號。沒有他們,rm會簡單地刪除文件cat(這可能不存在,而是因爲你使用rm -f你可能沒有注意到),並RemoveFromTop6000_reformatted.txt

試試這個:

#!/bin/bash 

for file in `cat RemoveFromTop6000_reformatted.txt`; do 
    rm -rv "$file" 
done 

,或者更簡單,

rm -rv `cat $file` 

(但這隻有在目錄名不包含空白時纔有效)。

+0

謝謝!工作很好。結束移動目錄而不是刪除它們,但是這個一般概念就是我所需要的。缺少的反引號是關鍵。謝謝! – kimmyjo221

0

你可以試試下面的命令,

命令:

sed 's/^/"/g' sample.txt | sed 's/$/"/g' | xargs rm -rfv 

說明:

命令將刪除 「sample.txt的」 提到的文件以及目錄。

注:

  • 在你的情況,確保 「RemoveFromTop6000_reformatted.txt」 只包含目錄名。
  • 如果目錄名稱包含空格,命令也可以工作。