使用 xargs 以交互方式删除目录

使用 xargs 以交互方式删除目录

查找所有使用千兆字节空间的目录。从 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 cutawk

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

相关内容