2013-07-04 57 views
0

我需要在某些文件中查找文本字符串。這會給我一個清單:如何搜索文本字符串並將這些文件複製到另一個目錄

find . -type f -print0 | xargs -0 grep -il "google"

然後我需要將這些文件複製到一個文件夾並重新命名。所以,我想我需要管他們再像這樣

| xargs -0 -n1 -I '{}' cp '{}' ../testTarget/{}_RECOVERED 

唉:

find . -type f -print0 | xargs -0 grep -il "google" | 
xargs -0 -n1 -I '{}' cp '{}' ../testTarget/{}_RECOVERED 

結果:cp: {}: No such file or directory

請告知

  • 文件名有空間和逗號(Dovecot)
+1

鏈接到一個解決類似的問題 http://stackoverflow.com/a/17392643/975114 – Amit

回答

0
for i in `ls -1tr` 
{ 
SEARCH_STRING_LINE_NO=`grep -n SEARCH_STRING i | cut -d: -f1`; 
if [ SEARCH_STRING_LINE_NO > 0 ] then 
cp i folder_path_where_u_want_to_copy 
fi 
} 

用您要查找的文本字符串替換SEARCH_STRING。

更換folder_path_where_u_want_to_copy與其中u要包含SEARCH_STRING

這應該複製包含SEARCH_STRING到該文件夾​​中的文件將文件移動folder_path_where_u_want_to_copy

我沒有測試此代碼的文件夾路徑,因爲我沒有一個UNIX盒,但至少它應該給你一個想法

+0

的問題似乎是,這樣做不處理文件名中的空格。這是我如何調整腳本。 'code' #!在'LS /斌/慶典 對我-1tr' 做 SEARCH_STRING_LINE_NO ='grep的-n 「谷歌」 $ I | cut -d:-f1'; if [SEARCH_STRING_LINE_NO> 0] then cp $ i「testTarget /」 fi done – user2548919

0

以下命令將greppatterncopy文件到你想要的位置。

find /path/to/search -type f -exec grep -q "pattern" '{}' ';' -exec cp '{}' /path/to/copy ';' 

一旦文件被複制,您可以使用rename命令將它們相應命名。

1
find . -type f -print0 | xargs -0 grep -lh "google" | xargs -I % cp % ../testTarget/%_RECOVERED 

find SOURCE/ -type f -print0 | xargs -0 grep -lh "SEARCH_STRING" | xargs -I % cp % TARGET_DIR/%_RECOVERED 
相關問題