查找所有使用千兆字节空间的目录。从 xargs 中提取目录名称,然后再次 xargs 将其删除。
du -d2 -h ~/Downloads/ | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2" | xargs rm -ri
我想以交互方式删除该目录,但我没有机会从 bash 中输入我的选项。
答案1
rm -ri
您无法使用最后一个管道命令以交互方式回答问题xargs
:解释这里。
相反,您可以将大目录列表作为参数rm -ri
:
rm -ri $(du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2")
请注意,您可以将其替换xargs cut
为awk
:
rm -ri $(du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | awk '{print $2}')
或者甚至更短:
rm -ri $(du -d2 -h ~/Downloads/* | awk '$1 ~ /G$/ {print $2}')
另请注意,如果文件名中有空格,上述命令将无法正常工作。
答案2
看起来确实有一种使用 xargs 交互式删除目录的方法。阅读手册页后,我自己提出了一个解决方案。
-p 选项和 -n 1 选项一起解决了这个问题。
du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2" | xargs -p -n1 rm -r