在 Linux 上,未经确认无法 rm

在 Linux 上,未经确认无法 rm

因此,我在 Foo 目录中有一个名为 Bar 的文件夹,它是指向其他地方的另一个文件夹的软符号链接。

我在目录 Foo 中。现在我想递归删除 build 文件夹。

如果我执行 rm -rf Bar,那么符号链接会被删除,但实际内容不会被删除。如果我执行 rm -rf Bar/*,那么 Bar 的内容会从原始位置删除(这正是我想要的),但它不会听从 -f 选项。它总是在删除之前确认。有办法解决这个问题吗?

答案1

首先:了解问题:

$ rm() { /bin/rm --interactive=always "$@"; }
$ mkdir -p rmtest && touch rmtest/a rmtest/b rmtest/c rmtest/d && rm -rf rmtest
$ rm() { /bin/rm "$@" --interactive=always; }
$ mkdir -p rmtest && touch rmtest/a rmtest/b rmtest/c rmtest/d && rm -rf rmtest
/bin/rm: descend into directory 'rmtest'? y
/bin/rm: remove regular empty file 'rmtest/b'? y
/bin/rm: remove regular empty file 'rmtest/a'? y
/bin/rm: remove regular empty file 'rmtest/d'? y
/bin/rm: remove regular empty file 'rmtest/c'? y
/bin/rm: remove directory 'rmtest'? y

这个--interactive=always(或-I-i)事情至少可以使用

a) 一个函数
b) 一个普通的包装脚本

顺便说一句:不能使用别名来完成,因为--interactive 参数会放在第一位。

您必须检查每一个以摆脱这种行为,或者您可以明确调用例如/bin/rm/usr/bin/rm

检查是否有 shell 函数 rm

set | grep "^rm ()"

摆脱它

unset rm

或者修改它以首先具有交互参数,以便可以覆盖它

rm() { /bin/rm --interactive=always "$@"; }

查找 shell 脚本:

which rm

或者

type -p rm

然后

file $whatever_path_was_shown

例如

file /bin/rm

如果它是一个 shell 脚本

$EDITOR /bin/rm

并将--interactive论点移到前面

如果你没有 root 权限,请使用指向原始 rm 的函数或别名隐藏 shell 脚本

相关内容