GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cómo eliminar todos los archivos en una carpeta particular presente en las subcarpetas del directorio actual, excluyendo un archivo determinado?

Hay muchas publicaciones en las que las personas preguntan cómo eliminar archivos, pero mi pregunta es más específica. Hay varias carpetas llamadas migrations en las subcarpetas del directorio actual, que contienen __init__.py archivo y algo más. Cómo eliminar todos los archivos excepto __init__.py en todas las subcarpetas denominadas migrations de la carpeta actual?

UPD:¿Y es posible sobrescribir __init__.py? con archivo vacío?

Estructura de carpetas:

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

Respuesta aceptada:

Con find :

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

Esto ejecuta find en el directorio actual (. ), y:

  • para cualquier cosa que coincida con migrations/__init__.py , ejecutará el truncate dominio. truncate -s 0 <file> reduce el archivo al tamaño 0 (vacío);
  • fallando esa coincidencia, para cualquier cosa que coincida con migrations/* , lo eliminará;
  • el * en -path coincide con / a diferencia del * en bash.

Ejemplo:

$ 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. Cómo tar (comprimir) archivos, excluyendo ciertos archivos o directorios

  2. ¿Eliminar todos los archivos en un directorio cuyo nombre no coincide con una línea en una lista de archivos?

  3. ¿Cómo eliminar todos los archivos con una extensión particular en una carpeta particular?

  4. ¿Usar Buscar para encontrar cierto directorio y eliminar todos los archivos excepto un directorio?

  5. ¿Cómo enumerar los tamaños de archivos recursivos de archivos y directorios en un directorio?

Cómo encontrar un archivo en Linux en todos los directorios recursivamente

Cómo eliminar todos los archivos de una carpeta excepto un archivo específico en Linux

Cómo extraer archivos a una carpeta en particular en Linux

¿Imprimir todos los archivos en una carpeta?

Cómo eliminar archivos/carpetas a través del administrador de archivos

¿Cómo establecer permisos de archivo predeterminados para todas las carpetas/archivos en un directorio?