我需要压缩一些文件,使用命令将压缩文件移动到其他目录 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