每周删除除某些文件夹以外的所有文件(但不包括其中的文件)



我每周使用此 bash 脚本删除目录中的所有文件和文件夹,除了三个文件夹和其中包含的文件。 但是我现在如何修改脚本,以便只保留这三个折叠,而不保留包含的文件? 这 3 个文件夹对于工作流是必需的,但不是包含的文件(7 天后)。

find /Path/Folder/* -type d -mtime +7 ! -path "/Path/Folder/NODELETE1"  ! -path "/Path/Folder/NODELETE2"  ! -path "/Path/Folder/NODELETE3" -exec rm -rf {} ;

我想要的是

以前

Path/NODELETE1/files
Path/NODELETE2/files
Path/NODELETE3/files
Path/FOLDERS
Path/files

Path/NODELETE1
Path/NODELETE2
Path/NODELETE3

编辑:

find /path/Folder/* -and -not -path "/path/Folder/DELEGATE*" -mtime +7 ! -regextype posix-egrep ! -regex ".*/path/Folder/(DOCUMENTS|WORK|PENDING)$" -delete

好吧,首先,如果要删除文件,则不再需要-type d。 您可以将regexfind一起使用来处理这种情况; 匹配不以NODELETE[1-3]结尾的所有内容regex

find path/folder/* -regextype posix-egrep ! -regex ".*path/folder/NODELETE[1-3]$"

这将匹配,例如:

$ find path/folder/* -regextype posix-egrep ! -regex ".*path/folder/NODELETE[1-3]$"
path/folder/asd
path/folder/asd/will_delete
path/folder/bleeegh
path/folder/NODELETE1/eraseme
path/folder/NODELETE2/a_folder
path/folder/NODELETE2/a_folder/delete_me

另外,您可以使用-delete而不是-exec rm -rf {}

$ find path/folder/* -regextype posix-egrep ! -regex ".*path/folder/NODELETE[1-3]$" -delete
$ tree
.
└── path
└── folder
├── NODELETE1
├── NODELETE2
└── NODELETE3
5 directories, 0 files

因此,文件夹仍然存在,其他文件夹和文件消失了,NODELETE[1-3]中的文件和文件夹也消失了。

不要忘记添加-mtime +7!(我省略了它,因为没有必要证明这种情况)


如果要保留其他文件夹,可以使用regex中的OR,该不会删除文件夹,但会删除其中的文件:

find path/folder/* -regextype posix-egrep ! -regex ".*path/folder/(NODELETE[1-3]|DOCUMENTS|WORK|DELEGATE)$" -delete

如果要保留某个文件夹的文件,则可以为find指定另一个过滤器:

find [...] -and -not -path "path/folder/DOCUMENTS*"

请注意,末尾的*不仅匹配文件夹本身,还匹配其中的所有文件。

最新更新