如何使 rm -rf 在目录级别仅要求确认一次?

如何使 rm -rf 在目录级别仅要求确认一次?

如果我使用rm -rfi,每次删除每个文件时都会询问我。如果我有一个命令列表rm -rf,我怎样才能使机器只要求我确认一次(当尝试删除目录本身时)

答案1

对于某些rm实现(来自 DragonFly BSD,至少是 FreeBSD 和 GNU), -I(大写 i)就是您要寻找的。 -i对每个文件都要求确认,而-I(大写的 i)当文件超过 3 个或递归删除时要求确认一次。

答案2

zsh -c 'rm -f -- **/*(^/)'
rm -ri -- *

这将递归地 ( **/) 删除所有*不是目录 ( ^/) 的内容 ( ) zsh;然后使用现有的 shell 以交互方式删除剩余的内容(目录)。要在初始删除中包含点文件,请使用:

zsh -c 'rm -f -- **/*(D^/)'

其次是:

rm -ri -- *

答案3

下面的代码片段将要求确认一次,然后它将删除整个目录'path/to/delete'

  1. 用于向用户read -p 'question ' answer显示并将答案存储在变量 中。 (尾随空格使提示更具可读性)'question '${answer}'question '
  2. [ ]使用带有字符串相等运算符的测试子句=以确保变量${answer}包含'expected answer'
  3. &&如果任何步骤不成功,请使用 and 运算符停止 - 例如[Ctrl]+[C]用于中断read或测试子句[ ]不为真
  4. 在写作之前rm -rf——想想事情可能会出现严重错误的场景。集思广益,讨论尽可能降低风险的方法
  5. 当满足上述所有条件时,强制删除目录rm -rf
PATH_TO_DELETE='path/to/delete'
read -p "Delete path '${PATH_TO_DELETE}'? [y/N] " YN && [ "${YN}" = 'y' ] && rm -rf "${PATH_TO_DELETE}"

答案4

尝试一下,这可能是一个疯狂的解决方案,但无论如何还是想分享!

function rm_ {
   [[ -d "$1" ]] && rm -rI "$1" || rm -f "$1"
}

然后使用rm_ <directory|file>.如果directory你得到了rm: remove all arguments recursively?,否则什么也没有,文件将被删除。

这样,用户在删除文件时不会有任何提示,而用户在删除目录时会有提示。

如果仅rm -rI使用,用户会收到文件和目录的确认提示,因此我使用了rm -f和的组合rm -rI

相关内容