使用xargs时如何解决no such file or directory的问题

How to solve no such file or directory while using xargs

我正在尝试将文件复制到同一目录但带有前缀。我正在使用 xargs 来做到这一点。注意:我不能使用 cd,因为它会破坏我管道中的构建。 这就是我的

root@gotoadmins-OU:~# ls
snap  test

root@gotoadmins-OU:~# ls test/
me.war

root@gotoadmins-OU:~# ls test | xargs -I {} cp {} latest-{} test/
cp: cannot stat 'me.war': No such file or directory
cp: cannot stat 'latest-me.war': No such file or directory

你可以只使用 cp 命令来做这个吗?

cp test/me.war test/latest-me.war

如果我理解正确的话,你只是想将一个子目录中的所有文件复制到同一个子目录,但前缀为“latest-”。

find test -type f -execdir bash -c 'cp "" latest-"$(basename "")"' "$(which bash)" "{}" \;

$(which bash) 可以用 bash 或任何其他词代替,真的。这只是一个占位符。

正如@KamilCuk 评论的那样,子外壳也可能是一个选项。如果您将命令放在括号内(例如 (cd test; for FILE in *; do cp "$FILE" latest-"$FILE"; done)),这些命令在子 shell 中是 运行,因此环境(包括您的工作目录)不受影响。