运行与 rm -rf * 等效的安全方法

运行与 rm -rf * 等效的安全方法

我有一个包含一系列手动步骤的任务。步骤之一是执行rm -rf *.文件夹中的所有内容确实需要删除,但这似乎有点危险。如果用户在运行命令时不注意并且位于错误的文件夹中。

有没有安全的方法来执行删除文件夹中所有内容的任务?

答案1

是的,在目录层次结构中向上移动一步并对rm -rf dirname特定目录名执行操作(该命令中不应涉及文件名通配)。

这样,如果用户碰巧位于错误的目录中,用户就不会意外地删除错误的内容,除非他们不幸在当前工作目录中有一个名称相同但不相关的目录。它还会删除任何rm -rf *可能丢失的隐藏文件和目录(由于*未扩展到隐藏名称)。

然后根据需要重新创建该目录。

另一种选择是不是删除该目录,但将其重命名(并可能对其进行存档和压缩)。这也可以从目录的父目录完成,并且允许您稍后从该目录恢复文件。这是否是一个可行的选择取决于该目录包含的内容以及当前的任务实际是什么。

还相关:

答案2

如果您主要担心的是用户没有注意,那么最好要求确认。例如:

delete_cwd() {
        printf 'Are you sure you want to unlink everything in %s? ' "$(pwd)"
        IFS= read REPLY
        case $REPLY in
        [yY]|[yY]es) find . -delete;;
        *) return 1;;
        esac
}

请注意,这-delete不是标准化的,因此您可能需要使用:

find . ! -name . -exec rm -rf {} +

或者,如果您想强制用户确认每次删除,您可以跳过该功能并直接执行以下操作:

find . ! -name . -depth -ok rm -rf {} +

答案3

简单的。要删除当前文件夹中的所有内容:

rm -rf ./*

./定向到当前目录,所以./*是当前目录中的所有内容。 (只是不要忘记点,说真的,不要忘记点)

正如 Kusalananda 的回答中所述,这不包括隐藏文件(因此要删除隐藏文件,您需要执行单独的操作)rm -rf ./.*

想要变得更奇特(一次安全地删除所有内容(包括隐藏文件)的命令)

rm -rf ./{,.[!.],..?}*

但有可能的是rm -rf ./* ./.*也会很安全(不确定你是否想抓住这个机会)

如果您想完全安全并且不确定自己位于哪个文件夹中,唯一的方法是

rm -rf /path/to/folder/*

或者

rm -rf /path/to/folder/{,.[!.],..?}*

相关内容