GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak odstranit všechny soubory v konkrétní složce přítomné v podsložkách aktuálního adresáře s výjimkou určitého souboru?

Existuje spousta příspěvků, kde se lidé ptají, jak smazat soubory, kromě jednoho, ale moje otázka je konkrétnější. Existuje několik složek s názvem migrations v podsložkách aktuálního adresáře, které obsahují __init__.py soubor a některé další. Jak odstranit všechny soubory kromě __init__.py ve všech podsložkách s názvem migrations z aktuální složky?

UPD:A je možné přepsat __init__.py s prázdným souborem?

Struktura složek:

├── 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

Přijatá odpověď:

Pomocí find :

find . -path '*/migrations/__init__.py' -exec truncate -s 0 {} + -o -path '*/migrations/*' -delete

Tím se spustí find v aktuálním adresáři (. ) a:

  • pro cokoli, co odpovídá migrations/__init__.py , spustí truncate příkaz. truncate -s 0 <file> zmenší soubor na velikost 0 (prázdný);
  • pokud se tato shoda nepodaří, pro vše, co odpovídá migrations/* , smaže jej;
  • * v -path odpovídá / na rozdíl od * v bash.

Příklad:

$ 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. Jak tarovat (komprimovat) soubory, s výjimkou určitých souborů nebo adresářů

  2. Smazat všechny soubory v adresáři, jejichž jméno neodpovídá řádku v seznamu souborů?

  3. Tisknout všechny soubory ve složce?

  1. Použijte Najít k nalezení určitého adresáře a odstranění všech souborů v něm kromě jednoho adresáře?

  2. Jak najít všechny soubory s velikostí souboru nula (0) bajtů v adresáři rekurzivně

  3. Jak odstranit všechny soubory v adresáři kromě některých?

  1. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  2. Jak odstranit všechny soubory s konkrétní příponou v konkrétní složce?

  3. Jak nastavit výchozí oprávnění k souborům pro všechny složky/soubory v adresáři?