我需要压缩一些文件,使用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)
你把它复杂化了。
如果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)