如何反转删除目录内的文件而不删除指定的文件

如何反转删除目录内的文件而不删除指定的文件

假设我的目录中有这些文件。

├── __init__.py
├── __init__.pyc
├── __pycache__
├── recognizer.wsgi
├── requirements.txt
├── src
└── upld

其中我想删除除upld目录之外的所有内容。我想知道是否有任何快速且更好的方法来做到这一点。

谢谢。

答案1

find . -path ./upld -prune -o ! -path . -print

这将用于find删除当前目录中的所有内容,包括子目录。但是,该路径./upld不会被删除(请注意,这必须是您要跳过的内容在初始搜索路径中的完整相对路径)。

运行它并检查输出,然后替换-print-delete.


安全选项,来自相关目录的父目录:

mkdir newdir
mv olddir/upld newdir
rm -rf olddir
mv newdir olddir

也就是说,upld为了安全起见,将子目录移开,然后完全删除旧目录。

答案2

假设您正在使用bash,至少有几种方法。我建议您先使用lsor进行操作echo,当您对结果感到满意时再尝试rm

1 明确要删除的内容,例如:

ls -d [_a-s]*

2 明确你想要保留的内容,例如:

shopt -s extglob # just once per session
ls -d !(upld)

您可以找到有关 bash 模式匹配的更多信息这里

相关内容