命令:
grep -rl "KORD" ./
搜索目录并返回文件内容(不是标题)中包含“KORD”的文件列表。
Users-MacBook-Air:myPhotorec user$ grep -rl "KORD" ./
.//output_apikey.txt
.//recup_dir.17/f13470392.txt
.//recup_dir.49/f45361992.txt
.//recup_dir.49/f45362424.txt
.//recup_dir.53/f48768408.txt
.//recup_dir.53/f49295480.txt
是否有一个首选命令(xargs?)可以扩充 grep 命令以将输出文件列表打印到控制台并将每个文件复制到 a 目录: ./ORD ?
我怀疑“给猫剥皮”的方法不止一种:我期待看到不止一种解决方案
JOHN1024 的 XARGS 解决方案
重复标签阻止将此修改后的帖子作为答案发布:
尝试:
grep -rl --null --include '*.txt' KORD . | xargs -0r cp -t /path/to/dest
因为此命令使用 NUL 分隔,所以它对于所有文件名都是安全的,包括那些包含空格、制表符甚至换行符的难命名的文件名。
以上需要 GNU cp
。对于 BSD/OSX,请尝试:
grep -rl --null --include '*.txt' KORD . | xargs -0 sh -c 'cp "$@" /path/to/dest' sh
这个怎么运作:
grep
选项和参数-r
告诉 grep 递归搜索目录结构。(在 FreeBSD 上,-r
将跟随符号链接进入目录。对于 OS/X 或最新版本的 GNU 都不是这样grep
。)--include '*.txt'
告诉 grep 仅返回名称与 glob 匹配的文件*.txt
(包括隐藏的文件,如.foo.txt
or.txt
)。-l
告诉 grep 只返回匹配文件的名称,而不是匹配项本身。--null
告诉 grep 使用 NUL 字符来分隔文件名。LINUX/UNIX
告诉 grep 只查找内容包含正则表达式的文件LINUX/UNIX
.
在当前目录中搜索。您可以在最新版本的 GNU 中省略它grep
,但是您需要传递一个--
选项终止符来cp
防止以 . 开头的文件名-
。
xargs
选项和参数-0
告诉 xargs 期待 NUL 分隔的输入。-r
告诉 xargs 除非找到至少一个文件,否则不要运行该命令。(此选项在 BSD 或 OSX 上都不需要,并且与 OSX 的xargs
.)不兼容。)cp -t /path/to/dest
将目录复制到目标目录。(-t
需要 GNUcp
。)
这将找到当前目录中或下方的所有常规文件。
grep -q 'KORD'
将在每个文件上运行,并且包含匹配行的文件将被复制到目录./ORD
中。如果你安装了 GNU coreutils,那么你可以使用稍微高效的
另请参阅:了解 `find` 的 -exec 选项