我想删除特定目录中除一个目录之外的所有文件和目录。对于同一操作,我运行了此命令
# 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