GNU/Linux >> Belajar Linux >  >> Ubuntu

Bagaimana Cara Menghapus Semua File Dalam Folder Tertentu Yang Ada Di Direktori Saat Ini Sub-folder Tidak Termasuk File Tertentu?

Ada banyak posting di mana orang menanyakan cara menghapus file kecuali yang, tetapi pertanyaan saya lebih spesifik. Ada beberapa folder bernama migrations di sub-folder direktori saat ini, yang berisi __init__.py berkas dan lainnya. Cara menghapus semua file kecuali __init__.py di semua sub-folder bernama migrations dari folder saat ini?

UPD:Dan apakah mungkin untuk menimpa __init__.py dengan file kosong?

Struktur folder:

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

Jawaban yang Diterima:

Dengan find :

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

Ini menjalankan find di direktori saat ini (. ), dan:

  • untuk apa pun yang cocok dengan migrations/__init__.py , itu akan menjalankan truncate memerintah. truncate -s 0 <file> memperkecil ukuran file menjadi 0 (kosong);
  • gagal mencocokkan, untuk apa pun yang cocok dengan migrations/* , itu akan menghapusnya;
  • * di -path cocok dengan / tidak seperti * di bash.

Contoh:

$ 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. Cara Menemukan File Di Linux Di Semua Direktori Secara Rekursif

  2. Cetak Semua File Dalam Folder?

  3. Gunakan Temukan Untuk Menemukan Direktori Tertentu Dan Hapus Semua File Di dalamnya Kecuali Satu Direktori?

  1. Cara Menghapus Semua File Dalam Folder Kecuali Satu File Tertentu Di Linux

  2. Bagaimana menemukan semua file dengan direktori induk tertentu di linux?

  3. Bagaimana cara menghapus semua file dalam direktori kecuali beberapa?

  1. Cara tar (kompres) file, tidak termasuk file atau direktori tertentu

  2. Hapus Semua File Dalam Direktori Yang Namanya Tidak Cocok Dengan Baris Dalam Daftar File?

  3. Bagaimana Cara Menghapus Semua File Dengan Ekstensi Tertentu Di Folder Tertentu?