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