Bash:查找包含特定字符串的文件并将它们复制到文件夹中
Posted
技术标签:
【中文标题】Bash:查找包含特定字符串的文件并将它们复制到文件夹中【英文标题】:Bash: Find files containing a certain string and copy them into a folder 【发布时间】:2020-02-04 20:17:53 【问题描述】:我想要的: 在 bash 脚本中:查找当前目录中包含某个字符串“teststring”的所有文件,并将它们复制到子文件夹“./testfolder”中
找到这个来找到我正在寻找的文件名
找到 . -type f -print0 | xargs -0 grep -l "teststring"
..并将找到的文件复制到另一个文件夹(此处通过文件名中的字符串选择):
找到 . -type f -iname "stringinfilename" -exec cp ./testfolder/ \;
结合这两个命令以实现我在顶部描述的最佳方式是什么?
【问题讨论】:
【参考方案1】:让 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 会报错。以上是关于Bash:查找包含特定字符串的文件并将它们复制到文件夹中的主要内容,如果未能解决你的问题,请参考以下文章