GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie lösche ich alle Dateien in einem bestimmten Ordner, der sich in Unterordnern des aktuellen Verzeichnisses befindet, mit Ausnahme einer bestimmten Datei?

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 , wird truncate 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

Ubuntu
  1. Wie man Dateien tariert (komprimiert), bestimmte Dateien oder Verzeichnisse ausschließt

  2. Wie lösche ich alle Dateien mit einer bestimmten Erweiterung in einem bestimmten Ordner?

  3. Wie listet man rekursive Dateigrößen von Dateien und Verzeichnissen in einem Verzeichnis auf?

  4. Wie lösche ich alle Dateien außer einer benannten Datei aus einem bestimmten Ordner?

  5. Wie kann ich den Namen vieler Dateien in einem Ordner ändern?

So entfernen Sie alle Dateien in einem Ordner außer einer bestimmten Datei in Linux

So extrahieren Sie Dateien in einen bestimmten Ordner unter Linux

So löschen Sie Dateien/Ordner über den Dateimanager

Wie verschiebt man alle Dateien vom aktuellen Verzeichnis in das obere Verzeichnis?

Wie lösche ich alle Dateien in einem Verzeichnis außer einigen?

Wie lösche ich .fuse_hidden*-Dateien?