Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash:查找包含特定字符串的文件并将其复制到文件夹中_Linux_Bash_Search_Find_Copy - Fatal编程技术网

Linux Bash:查找包含特定字符串的文件并将其复制到文件夹中

Linux Bash:查找包含特定字符串的文件并将其复制到文件夹中,linux,bash,search,find,copy,Linux,Bash,Search,Find,Copy,我想要的是: 在bash脚本中:查找当前目录中包含特定字符串“teststring”的所有文件,并将其复制到子文件夹“/testfolder” 找到此文件以查找我要查找的文件名 查找-键入f-print0 | xargs-0 grep-l“teststring” ..此选项用于将找到的文件复制到另一个文件夹(此处按文件名中的字符串选择): 查找-类型f-iname“StringInflineName”-exec cp{}./testfolder/\ 将这两个命令结合起来以实现我在顶部描述的功能的

我想要的是: 在bash脚本中:查找当前目录中包含特定字符串“teststring”的所有文件,并将其复制到子文件夹“/testfolder”

找到此文件以查找我要查找的文件名

查找-键入f-print0 | xargs-0 grep-l“teststring”

..此选项用于将找到的文件复制到另一个文件夹(此处按文件名中的字符串选择):

查找-类型f-iname“StringInflineName”-exec cp{}./testfolder/\

将这两个命令结合起来以实现我在顶部描述的功能的最佳方法是什么?

让find同时执行这两个命令:

find . -name subdir -prune -o -type f -exec \
    grep -q teststring "{}" \; -exec cp "{}" subdir \;  

请注意,如果您不尝试添加到正在工作的目录中,这样的事情会容易得多。换句话说,写入同级目录而不是写入子目录。如果您想在子目录中结束数据,则完成后,
mv
将其删除。这样,您就不必担心
prune
(也就是说,您不必担心find下降到子目录并试图复制工作)

嗨,非常感谢,它很有效。为了让我了解它是如何工作的,以及工作的顺序:从左到右:1)在中查找所有文件。没有下降到子目录。2) 检查每个文件是否包含grep 3)将找到的文件复制到子目录的字符串。我猜这些步骤是在find函数中执行的。为什么我需要逃跑的\;?
终止
-exec
命令。如果你忽略它,find会抱怨。