GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment supprimer tous les fichiers d'un dossier particulier présent dans les sous-dossiers du répertoire actuel à l'exclusion d'un certain fichier ?

Il y a beaucoup de messages où les gens demandent comment supprimer des fichiers sauf certains, mais ma question est plus précise. Il existe plusieurs dossiers nommés migrations dans les sous-dossiers du répertoire courant, qui contiennent __init__.py fichier et quelques autres. Comment supprimer tous les fichiers sauf __init__.py dans tous les sous-dossiers nommés migrations du dossier actuel ?

UPD :Et est-il possible d'écraser __init__.py avec un fichier vide ?

Arborescence des dossiers :

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

Réponse acceptée :

Avec find :

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

Cela exécute find dans le répertoire courant (. ), et :

  • pour tout ce qui correspond à migrations/__init__.py , il exécutera le truncate commande. truncate -s 0 <file> réduit le fichier à la taille 0 (vide) ;
  • à défaut de correspondance, pour tout ce qui correspond à migrations/* , il le supprimera ;
  • le * dans -path correspond à / contrairement au * en bash.

Exemple :

$ 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. Comment tar (compresser) des fichiers, en excluant certains fichiers ou répertoires

  2. Supprimer tous les fichiers d'un répertoire dont le nom ne correspond pas à une ligne dans une liste de fichiers ?

  3. Imprimer tous les fichiers d'un dossier ?

  4. Utilisez Rechercher pour trouver certains répertoires et supprimer tous les fichiers qu'il contient sauf un répertoire ?

  5. Comment trouver tous les fichiers avec un répertoire parent particulier sous Linux ?

Comment supprimer tous les fichiers d'un dossier sauf un fichier spécifique sous Linux

Comment extraire des fichiers dans un dossier particulier sous Linux

Comment puis-je changer le nom de plusieurs fichiers dans un dossier ?

Comment supprimer un fichier/dossier via le gestionnaire de fichiers

Comment rechercher tous les fichiers avec une taille de fichier de zéro (0) octet dans un répertoire de manière récursive

Comment supprimer tous les fichiers d'un répertoire sauf certains ?