我想限制放入 tar 球的文件数量,并在将它们插入 tar 球并独立于当前目录后将其删除。我已经尝试过这个:
tar -C ~/semios/tmp/ -cjvf ~/semios/tmp/test.tar.bz2 $(cd ~/semios/tmp/; ls *| head -5) | xargs rm -f
但这将文件保留为tar
仅打印文件名而不是整个路径的详细选项,我以为我可以用参数修复它,-C
但它看起来不像......有什么提示吗?
答案1
假设路径中没有邪恶字符(空格、换行符):
... $(ls ~/semios/tmp/*| head -5) | xargs -d '\n' rm -f
或者
... | { cd ~/semios/tmp/; xargs -d '\n' rm -f; }
或者
tar -C ~/semios/tmp/ -cjvf ~/semios/tmp/test.tar.bz2 \
$(cd ~/semios/tmp/; ls * | head -5 |
{ while read file; do echo "$file"; rm -f "$file"; done;})
编辑
由于xargs
默认使用任何空格作为分隔符,因此应将换行符设置为唯一的分隔符。但由于这个$()
例子即使名称中有空格也会崩溃。
答案2
或者
$ tar -cjf test.tar.bz2 $(find ~/semios/tmp/ -name "*"| head -5 | xargs rm -f)