2013-07-10 18 views
1

我有一個文件夾與多個文件夾和66GB的文件。 (.doc/.docx/.xls/.xlsx/.msg等)grep for多個目錄的關鍵字和移動找到的文件

我需要一個循環命令,它將通過整個目錄結構遞歸搜索文件主體中的關鍵字& /然後將找到的文件移到單獨的位置。

我試過這個命令,它可以在單個文件夾上工作,但是當我將-r添加到grep命令時,它會抓取整個文件夾,因爲其中一個文件包含關鍵字搜索匹配。

for file in * 
do 
    if grep -rq 'Pro*' "$file" 
    then 
    sudo mv "$file" /home/pdog/Downloads/testmv/ 
    fi 
done 

我一直在尋找這樣的過去24小時的方式,我爲什麼整個文件夾被移動也根本不能工作了?

回答

0

嘗試

for file in `grep -rl ...` 

-l--files-with-matches)將只打印文件名,所以你應該匹配的所有文件的集合最終,正是你想要的。

編輯:爲了解決空間,試試這個:

OLDIFS="$IFS" 
FILES=`grep -rl ...` 
IFS="$OLDIFS" 
for file in $FILES 
do 
    ... 
done 
+0

所以我只想澄清:我在的地方把'grep的-FL ...' *在第一行「for file in?cause如果是這種情況,那麼我得到以下錯誤: grep:l:沒有這樣的文件或目錄 – Summo

+0

@ user2566508:Gaah,typo。應該是'-rl'。 – Amadan

+0

我覺得我現在遇到了空白問題 以下錯誤出現 的grep:無題:沒有這樣的文件或目錄 grep的:文件:沒有這樣的文件或目錄 的grep:(複印件):沒有這樣的文件或目錄 – Summo

0

試試這個:

grep -irl "key word" * | xargs -n1 -I{} mv {} /home/pdog/Downloads/testmv/ 
+0

Thx - xargs:無與倫比的單引號;默認情況下引號對xargs是特殊的,除非你使用-0選項。在運行之前,我需要確保文件夾結構得到維護 - 因爲有1000個文件有100個,我不能確定是否有重複的名稱。 – Summo

+0

@Summo抱歉,我不確定我是否理解你的問題。你有錯誤嗎? –

+0

我得到一個錯誤,告訴我在命令行中輸入-0。所以我加了-0開關並運行命令。我看了一下文件夾,一些文件移動了過來,但它只是坐在那裏 - 我假設它停止了,因爲它沒有移動到下一個文件夾。 – Summo

相關問題