如何删除当前目录子文件夹中存在的特定文件夹中的所有文件,不包括某个文件?

Мих*_*лов 4 command-line

有很多帖子询问如何删除除文件以外的文件,但我的问题更具体。migrations当前目录的子文件夹中有几个文件夹,其中包含__init__.py文件等。如何删除除从当前文件__init__.py夹命名的所有子文件夹中的所有migrations文件?

UPD:是否可以__init__.py用空文件覆盖?

文件夹结构:

??? folder_1
?   ??? migrations
?   ?   ??? 0001_initial.py
?   ?   ??? __init__.py
?   ?   ??? __pycache__
?   ?       ??? 0001_initial.cpython-35.pyc
?   ?       ??? __init__.cpython-35.pyc
??? folder_2
?   ??? migrations
?   ?   ??? 0001_initial.py
?   ?   ??? __init__.py
?   ?   ??? __pycache__
?   ?       ??? 0001_initial.cpython-35.pyc
?   ?       ??? __init__.cpython-35.pyc
??? folder_3
?   ??? admin.py
?   ??? apps.py
?   ??? __init__.py
?   ??? migrations
?   ?   ??? 0001_initial.py
?   ?   ??? __init__.py
?   ?   ??? __pycache__
?   ?       ??? 0001_initial.cpython-35.pyc
?   ?       ??? __init__.cpython-35.pyc
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 7

find

find . -path '*/migrations/__init__.py' -exec truncate -s 0 {} + -o -path '*/migrations/*' -delete
Run Code Online (Sandbox Code Playgroud)

find在当前目录 ( .) 中运行,并且:

  • 对于任何匹配migrations/__init__.py,它将运行truncate命令。truncate -s 0 <file>将文件减小到大小 0(空);
  • 该匹配失败,对于任何匹配migrations/*,它将删除它;
  • *-path比赛/不像*在bash。

例子:

$ tree                                                                                                                                   
.
??? folder_1
?   ??? migrations
?       ??? 0001_initial.py
?       ??? __init__.py
?       ??? __pycache__
?           ??? 0001_initial.cpython-35.pyc
?           ??? __init__.cpython-35.pyc
??? folder_2
?   ??? migrations
?       ??? 0001_initial.py
?       ??? __init__.py
?       ??? __pycache__
?           ??? 0001_initial.cpython-35.pyc
?           ??? __init__.cpython-35.pyc
??? folder_3
    ??? admin.py
    ??? apps.py
    ??? __init__.py
    ??? migrations
        ??? 0001_initial.py
        ??? __init__.py
        ??? __pycache__
            ??? 0001_initial.cpython-35.pyc
            ??? __init__.cpython-35.pyc

9 directories, 15 files
$ find . -path '*/migrations/__init__.py' -exec truncate -s 0 {} + -o -path '*/migrations/*' -delete                
$ tree                                                                                              
.
??? folder_1
?   ??? migrations
?       ??? __init__.py
??? folder_2
?   ??? migrations
?       ??? __init__.py
??? folder_3
    ??? admin.py
    ??? apps.py
    ??? __init__.py
    ??? migrations
        ??? __init__.py

6 directories, 6 files

$ wc -l */migrations/__init__.py
0 folder_1/migrations/__init__.py
0 folder_2/migrations/__init__.py
0 folder_3/migrations/__init__.py
0 total
Run Code Online (Sandbox Code Playgroud)