gpt4 book ai didi

macos - 如何复制在 OSX 上使用 grep 找到的文件

转载 作者:行者123 更新时间:2023-12-05 06:29:45 26 4
gpt4 key购买 nike

我想复制我在 OSX 系统上使用 grep 找到的文件,其中 cp 命令没有 -t 选项。

A previous posts' solution做这样的事情依赖于 cp 中的 -t 标志。但是,就像那张海报一样,我想获取从 grep 收到的文件列表,然后对其执行命令,例如:

grep -lr "foo"--include=*.txt * 2>/dev/null | xargs cp -t/path/to/targetdir

最佳答案

效率低于 cp -t,但它有效:

grep -lr "foo" --include=*.txt * 2>/dev/null |
xargs -I{} cp "{}" /path/to/targetdir

解释:

对于 文件名 | xargs cp -t destination, xargs 将传入的文件名更改为以下格式:

cp -t destination filename1 ... filenameN

也就是说,它只运行 cp 一次(实际上,每几千个文件名运行一次 -- xargs 如果对 shell 来说太长,它会中断命令行).

对于 文件名 | xargs -I{} cp "{}"destination,另一方面,xargs 将传入的文件名更改为以下格式:

cp "filename1" destination
...
cp "filenameN" destination

即,它为每个传入的文件名运行一次 cp,这要慢得多。对于大量(例如,>10k)非常小(例如,<10k)的文件,我猜它甚至可能慢数千倍。但它确实有效:)

PS:另一种流行的技术是使用findexec 函数代替xargs,例如https://stackoverflow.com/a/5241677/1563960

关于macos - 如何复制在 OSX 上使用 grep 找到的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53268628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com