使用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 "$1" latest-"$(basename "$1")"' "$(which bash)" "{}" \;

$(which bash) 可以替换为单词 bash 或任何东西,真的。这只是一个占位符。

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