Es gibt viele Posts, in denen Leute fragen, wie man Dateien außer solchen löscht, aber meine Frage ist spezifischer. Es gibt mehrere Ordner namens migrations in den Unterordnern des aktuellen Verzeichnisses, die __init__.py enthalten Datei und einiges mehr. So löschen Sie alle Dateien außer __init__.py in allen Unterordnern namens migrations aus aktuellem Ordner?
UPD:Und ist es möglich, __init__.py zu überschreiben? mit leerer Datei?
Ordnerstruktur:
├── 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
Akzeptierte Antwort:
Mit find :
find . -path '*/migrations/__init__.py' -exec truncate -s 0 {} + -o -path '*/migrations/*' -delete
Dies führt find aus im aktuellen Verzeichnis (. ) und:
- für alles, was mit
migrations/__init__.pyübereinstimmt , wirdtruncateausgeführt Befehl.truncate -s 0 <file>reduziert die Datei auf Größe 0 (leer); - wenn diese Übereinstimmung nicht zustande kommt, für alles, was mit
migrations/*übereinstimmt , es wird gelöscht; - der
*im-pathstimmt mit/überein im Gegensatz zu*in bash.
Beispiel:
$ 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