如何在 unix 中等待 mv 命令完成?

如何在 unix 中等待 mv 命令完成?

我需要压缩一些文件,使用命令将压缩文件移动到其他目录 mv,然后从原始位置删除所有文件。但就我而言,rm命令在命令之前执行并且命令mv失败。mv

我尝试了以下方法,但没有帮助。

方法一:

$ zip -r foo.zip * &;  wait %1 && mv foo.zip mydir &; wait %1 && rm -rf *

方法2:

[ zip -r foo.zip *] || {mv foo.zip mydir && rm -rf *}

答案1

你让事情变得复杂了。

如果zip退出时退出状态反映成功或失败,您可以简单地执行以下操作

$ zip -r foo.zip . && mv foo.zip mydir && rm -rf *

但是,我真的希望mydir它不位于当前目录中,否则它会被rm -rf *.一般来说,在使用时rm -rf,我会想两三遍,然后再在*后面加一个!!事实上,我rm -rf *用一只手的手指就能数出去年我这样做的次数( )。我永远不会把它写进剧本里。

更安全的方法(假设mydir实际上是到当前目录之外的其他位置的路径):

$ zip -r --move --test foo.zip . && mv foo.zip mydir

甚至

$ zip -r --move --test mydir/foo.zip .

请注意使用.(点) 而不是*。任何名称中以*a 作为第一个字符的文件都将被解释为命令行切换到.通过创建一个名为 的文件来测试这一点,例如:-zip--encrypt

$ touch -- --encrypt
$ zip -r --move --test ../test.zip *
Enter password:

$ rm -- --encrypt

相关内容