如何从 centos 中的特定文件夹中删除除一个命名目录之外的所有文件和目录

如何从 centos 中的特定文件夹中删除除一个命名目录之外的所有文件和目录

我想删除特定目录中除一个目录之外的所有文件和目录。对于同一操作,我运行了此命令

# rm -R -df !(目录名不删除)

它在 Ubuntu 中可以正常工作,但在 CentOS 中会出现错误;即

-bash: !: event not found  " what is the reason for this error"

我必须在 CentOS 中使用什么才能使其工作?在 Centos 中,有没有“!”这个符号的替代品?

答案1

首先,!(dir_name_not_to_delete)是扩展的 glob。要使其工作,您需要打开扩展的 glob 选项。运行:

shopt -s extglob

其次,您看到的特定错误消息-bash: !: event not found意味着您还打开了历史记录扩展。如果您不想使用历史记录扩展,最安全的做法是将其关闭:

set +H

答案2

好的,列出该文件夹中的所有内容,然后排除该文件夹并删除其他所有内容,怎么样?

find MYDIR -not -name EXCEPT_DIR -exec rm -rf {}\;

但在执行此操作之前,请先测试一下 find 命令会找到什么,例如:

find MYDIR -not -name EXCEPT_DIR

相关内容