Linux下经常会出现有文件的名称变为了特殊字符或乱码,导致无法删除的情况,这个时候我们可以使用一些方法删除,比如:在当前目录下,删除除了XXX目录以外的所有内容(包括名称乱码的文件),可以用:
find . -mindepth 1 ! -name XXX ! -path './XXX/*' -exec rm -rf {} +更推荐先预览一下会删哪些:
find . -mindepth 1 ! -name XXX ! -path './XXX/*' -print确认没问题后再执行删除:
find . -mindepth 1 ! -name XXX ! -path './XXX/*' -exec rm -rf {} +含义:
-mindepth 1表示不匹配当前目录.本身。
! -name XXX ! -path './XXX/*'表示保留XXX目录以及XXX目录下的所有内容。
也可以用 Bash 的方式:
shopt -s extglob rm -rf !(XXX)但这个方式依赖 Bash 的extglob,而且对隐藏文件处理不如find方式稳妥。建议用find。