2017-06-20 215 views
0

这是我的shell脚本中的一条语句。 $ {origin}和$ {archive}是2个目录。如何在shell脚本中检查并使用cp命令的状态?

该命令读取$ {origin}文件夹中的所有jpg,png和jpeg文件,并将它们复制到$ {archive}文件夹中。

find ${origin} -regex '.*\(jpg\|png\|jpeg\)' -exec cp -n {} ${archive} \; 

我想的是,如果CP成功地复制文件,(也表明该文件没有在$ {}存档文件夹中存在),它会执行一些命令。

问题:

  1. 我怎么能知道是否CP成功复制该文件,在shell脚本?

  2. 我可以在哪里放置if语句?

回答

3

find -exec文档说:

执行命令;如果返回0状态,则返回true。

在这种情况下,“true”意味着-exec命令的结果,它控制着匹配文件的处理是否会继续。所以你可以这样做:

find ... -exec cp -n {} ${archive} \; -exec OTHER STUFF \; 

也就是说,首先尝试复制文件。如果cp成功,则将返回0,其中find将视为true表示“继续处理此文件”。

+0

感谢您的回答。它完美地解决了我的问题。是否有可能检查cp命令是否覆盖shell脚本中的现有文件? –

+0

您可以使用像'-exec test -f $ {archive}/{} \;'这样的命令,只有当文件已经存在于目标中时,才会继续处理。在'test'前放一个'!'来反转检查。 –