如何搜索文本字符串并将这些文件复制到另一个目录

时间:2013-07-04 04:09:34

标签: unix command-line find xargs cp

我需要在一些文件中找到一个文本字符串。这会给我一个清单:

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)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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替换为您要移动包含SEARCH_STRING的文件的文件夹路径

这应该将包含SEARCH_STRING的文件复制到文件夹folder_path_where_u_want_to_copy

我没有测试过这段代码,因为我现在没有一个unix盒子,但至少它应该给你一个接近的想法

答案 2 :(得分:0)

以下命令将grep patterncopy文件放到您想要的位置。

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

复制文件后,您可以使用rename命令重新命名它们。