gpt4 book ai didi

linux - 我找到了一种使用 find -exec 将多个文件集中在一行中的方法,如 xargs,但我不确定它到底是如何工作的

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:42 24 4
gpt4 key购买 nike

我一直在使用 find -exec 和 find | xargs 在过去几个小时的探索和试验中,现在我发现了我在其他任何地方都没有见过的命令变体。

例如这个find命令获取子目录中的所有文件并将它们复制到当前目录

find . -type f -regex './[^\.].*/[^.*].*' -exec sh -c 'cp "$@" .' thiscanbeanything {} +

都会像这样在一行上执行:

cp ./testy/bar ./testy/baz ./testy/foo .

而不是通常的:

find . -type f -regex './[^\.].*/[^.*].*' -exec sh -c 'cp {} .' \;

多行执行

cp ./testy/bar .
cp ./testy/baz .
cp ./testy/foo .

此外,在第一个命令中,输出将仅为:

cp ./testy/baz ./testy/foo .

除非 sh -c 'cmd' 后跟其他内容,在我的示例中是 thiscanbeanything.

有人可以阐明发生了什么,或者这是否可行?

最佳答案

要了解发生了什么,请看一下:

$ sh -c 'echo 0=$0 1=$1 2=$2' thiscanbeanything one two
0=thiscanbeanything 1=one 2=two

这将使用选项 -c 'echo 0=$0 1=$1 2=$2' 和三个参数 thiscanbeanything one two 执行 sh .

通常,$0 是正在执行的脚本的名称。运行 sh -c 时,没有脚本,但名称取自您提供的第一个参数,在本例中为 thiscanbeanything

文档

此行为记录在 man bash-c 选项下:

-c string
If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with $0.

关于linux - 我找到了一种使用 find -exec 将多个文件集中在一行中的方法,如 xargs,但我不确定它到底是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28599690/

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