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

1 zip command

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

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

方法一:

$ zip -r foo.zip * &;  wait %1 && mv foo.zip mydir &; wait %1 && rm -rf *
Run Code Online (Sandbox Code Playgroud)

方法二:

[ zip -r foo.zip *] || {mv foo.zip mydir && rm -rf *}
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 5

你把它复杂化了。

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

$ zip -r foo.zip . && mv foo.zip mydir && rm -rf *
Run Code Online (Sandbox Code Playgroud)

但是,我真的希望mydir它不在当前目录中,否则它会被rm -rf *. 一般来说,在使用时rm -rf,我会想两到三遍,然后再放一个*!!事实上,我可以rm -rf *用一只手的手指数出过去一年我这样做的次数()。我永远不会把它放在脚本中。

更安全的方法(假设mydir实际上是指向当前目录以外的其他地方的路径):

$ zip -r --move --test foo.zip . && mv foo.zip mydir
Run Code Online (Sandbox Code Playgroud)

甚至

$ zip -r --move --test mydir/foo.zip .
Run Code Online (Sandbox Code Playgroud)

请注意使用.(dot) 而不是*。与*用任何文件-,如它的名字的第一个字符将被解释为命令行开关zip。通过创建一个名为 的文件来测试这一点--encrypt,例如:

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

$ rm -- --encrypt
Run Code Online (Sandbox Code Playgroud)

  • 您可以将 `zip` 和 `rm` 聚合到 `zip -r --move --test foo.zip *` (2认同)