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 , wirdtruncate
ausgefü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-path
stimmt 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