尽管此处的某些文件名在文件名的开头包含破折号,但我正在关注此问题。这被解释为cp
.
在另一个问题(关于ServerFault)之后,我尝试将命令更改为:
shuf -zn8 -e *.jpg | xargs -0 cp -vt -- {} target/
或者
shuf -zn8 -e *.jpg -exec cp -vt -- {} target/
无济于事。我如何处理-
文件名的开头?
尽管此处的某些文件名在文件名的开头包含破折号,但我正在关注此问题。这被解释为cp
.
在另一个问题(关于ServerFault)之后,我尝试将命令更改为:
shuf -zn8 -e *.jpg | xargs -0 cp -vt -- {} target/
或者
shuf -zn8 -e *.jpg -exec cp -vt -- {} target/
无济于事。我如何处理-
文件名的开头?
看起来它
shuf
不是cp
以破折号开头的文件名。尝试在shuf
命令中添加双破折号:我会用
find
这个,而不是shuf
:cp
在这种情况下,您也不需要双破折号,因为find
将返回带有./
前缀的文件名。-t
选项(一个 GNU 扩展)接受一个参数,即目标目录。使用
xargs -0 cp -vt -- target/
, 将尝试将target/
所选文件复制到名为 的目录--
中,并且您仍然不会标记选项的结尾。您还需要标记选项的结束shuf
。{}
仅与find
'-exec
谓词或与 ' 谓词相比是特殊的,xargs
如果你使用-I'{}'
,但你在这里不需要它。shuf
没有-exec
谓词。在这里,你会想要:
或者
使用
zsh
,您还可以使用其e
基于 xpression 的o
rdering glob 限定符:shuf
与在任何系统上工作的方法相比,这具有优势(前提zsh
是已安装;您可能需要放弃-v
某些系统上的非标准)并且即使jpg
当前目录中有两个很多文件(和执行shuf
将失败并出现太多参数错误)。