使用 `-exec` 和 `xargs` 时处理以破折号(“-”)开头的文件名

hav*_*kok 2 command-line xargs cp exec

我正在关注这个问题,尽管这里的一些文件名在文件名开头包含破折号。这被解释为 的附加选项cp

在另一个问题(关于 ServerFault)之后,我尝试将命令更改为:

shuf -zn8 -e *.jpg | xargs -0 cp -vt -- {} target/ 
Run Code Online (Sandbox Code Playgroud)

或者

shuf -zn8 -e *.jpg -exec cp -vt -- {} target/
Run Code Online (Sandbox Code Playgroud)

无济于事。如何处理-文件名的开头部分?

rus*_*ord 5

看起来它shuf并不是cp在处理以破折号开头的文件名。尝试将双破折号添加到shuf命令中:

shuf -zn8 -e -- *.jpg | xargs -0I{} cp -vt -- "{}" target/ 
Run Code Online (Sandbox Code Playgroud)

我会用find这个,而不是shuf

find . -type f -name '*.jpg' -print0 | xargs -0I{} cp "{}" target/
Run Code Online (Sandbox Code Playgroud)

cp此外,在这种情况下,您不需要双破折号,因为find将返回带有前缀的文件名./