Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在shell脚本中检查和使用cp命令的状态?_Linux_Bash_Shell_If Statement_Cp - Fatal编程技术网

Linux 如何在shell脚本中检查和使用cp命令的状态?

Linux 如何在shell脚本中检查和使用cp命令的状态?,linux,bash,shell,if-statement,cp,Linux,Bash,Shell,If Statement,Cp,这是我的shell脚本中的一条语句${origin}和${archive}是两个目录 该命令读取${origin}文件夹中的所有jpg、png和jpeg文件,并将它们复制到${archive}文件夹 find ${origin} -regex '.*\(jpg\|png\|jpeg\)' -exec cp -n {} ${archive} \; 我想要的是,如果cp成功地复制了一个文件,(还指示该文件在${archive}文件夹中不存在),它将执行一些命令 问题: 如何知道cp是否成功复制了s

这是我的shell脚本中的一条语句${origin}和${archive}是两个目录

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

find ${origin} -regex '.*\(jpg\|png\|jpeg\)' -exec cp -n {} ${archive} \;
我想要的是,如果cp成功地复制了一个文件,(还指示该文件在${archive}文件夹中不存在),它将执行一些命令

问题:

  • 如何知道cp是否成功复制了shell脚本中的文件

  • 在哪里可以放置if语句


  • find-exec
    的文档说明:

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

    此上下文中的“true”表示
    -exec
    命令的结果,该命令控制是否继续处理匹配的文件。所以你可以这样做:

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

    即,首先尝试复制文件。如果
    cp
    成功,它将返回
    0
    ,而
    find
    将其视为
    true
    意思是“继续处理此文件”。

    find-exec的文档说明:

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

    此上下文中的“true”表示
    -exec
    命令的结果,该命令控制是否继续处理匹配的文件。所以你可以这样做:

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

    即,首先尝试复制文件。如果
    cp
    成功,它将返回
    0
    ,而
    find
    将其视为
    true
    意思是“继续处理此文件”。

    感谢您的回答。它完美地解决了我的问题。是否可以检查cp命令是否覆盖shell脚本中的现有文件?可以使用类似于
    -exec test-f${archive}/{}的命令
    仅当目标中已存在文件时,才会继续处理。放一个
    测试
    前面,以反转支票。感谢您的回答。它完美地解决了我的问题。是否可以检查cp命令是否覆盖shell脚本中的现有文件?可以使用类似于
    -exec test-f${archive}/{}的命令
    仅当目标中已存在文件时,才会继续处理。放一个
    测试
    前面编码>以反转检查。