Direktori tingkat atas saya adalah data
. data
termasuk beberapa direktori dan direktori ini memiliki sub-direktori. Saya perlu menghapus semua file dan direktori di dalam data/
kecuali beberapa file di beberapa direktori.
Sebagai contoh, data termasuk direktori 100
dan 101
. Saya hanya ingin menyimpan a.txt
dan b.txt
file dalam 100/
dan c.txt
dan d.txt
file 101/
sambil menghapus semua file dan direktori lainnya di 100
dan 101
.
Contoh:
.
├── 100
│ ├── a.txt
│ ├── b.txt
│ ├── c.txt
│ └── d.txt
└── 101
├── a.txt
├── b.txt
├── c.txt
└── d.txt
Saya menggunakan rm -rf !(a.txt|b.txt)
perintah tetapi saya tidak bisa menerapkan perintah ini untuk setiap direktori secara otomatis.
sumber
rm
seharusnya mengetahui file mana yang harus disimpan di direktori mana jika Anda tidak ingin menentukannya.Anda bisa menggunakannya
find
untuk ini. Anda dapat meniadakan tesfind
dengan-not
atau!
. Ini akan mengecualikan pertandingan, daripada menemukan mereka.Anda harus berhati-hati untuk tidak menghapus direktori induk dari file yang ingin Anda simpan, terutama direktori saat ini
.
, jadi pastikan Anda membaca output dengan seksama sebelum menghapus.Berdasarkan contoh Anda, Anda dapat melakukan sesuatu seperti ini dari
data
direktori.Tambahkan a
! -path ./path/to/dir
untuk setiap jalur yang Anda ingin hindari menghapus. Anda dapat menggunakan metakarakter seperti*
, tetapi pastikan Anda mengutip ungkapan jika Anda melakukannya, misalnya"./path*dir"
, untuk mencegah ekspansi yang tidak diinginkan.find
bersifat rekursif secara default. Bahkan jika kita tidak menemukan di./100
sini, kita akan menemukan semua isinya kecuali mereka cocok dengan polanya[ab].txt
. Jika Anda tidak dapat mencocokkan semua nama yang ingin Anda pertahankan, tambahkan tes lain:Ini tidak akan menemukan
a.txt
ataub.txt
ataufoo
, tetapi akan menemukan semua file lainnya.Ketika Anda yakin melihat apa yang Anda inginkan, Anda dapat menambahkan
-delete
sampai akhir untuk menghapus file yang ditemukan:sumber