Saya memiliki banyak file dan folder di folder tertentu dan saya ingin menghapus semuanya; Namun, saya ingin menyimpan file X, Y, dan Z.
Apakah ada cara saya bisa melakukan sesuatu seperti: rm * | but NOT grep | X or Y or Z
command-line
rm
Amit
sumber
sumber
Jawaban:
Alih-alih menggunakan rm, mungkin lebih mudah digunakan find . Perintah seperti ini akan menghapus semuanya kecuali file yang bernama persis 'file'
Banyak versi harus dapat mendukung globbing dan pencocokan ekspresi reguler.
Anda juga bisa menyalurkan output find ke rm juga
sumber
-delete
serta file apa yang akan disimpan dengan menghapus-delete
dan\!
.find
bersifat rekursif! jadi semua file subdirektori yang tidak cocok dengan ' pola ' juga akan dihapusMenggunakan zsh, dengan
setopt EXTENDED_GLOB
, menggunakan~
operator ( kecuali )atau
^
operator (negasi):Tapi, Anda mungkin harus memindahkan file di tempat lain, lalu hapus semuanya. Ini jauh lebih aman dalam hal slip jari, seperti memukul masuk terlalu cepat.
sumber
Versi bash yang lebih baru memiliki
extglob
opsi shell yang memberi Anda sintaks untuk melakukan apa yang Anda inginkan (periksa halaman manual Anda di bawah "Pathname Expansion" untuk melihat apakah versi yang diinstal memilikinya):Untuk menguji, saya sarankan Anda ganti dulu
rm
denganecho
untuk melihat apakah daftar file yang akan dihapus adalah apa yang Anda harapkan.sumber
Perhatian: Jalankan perintah dan jika file yang akan dihapus adalah yang benar, jalankan lagi dan hapus karakter hash "#".
Jika nama file lebih rumit dari itu, lakukan
Sekali lagi, pertama lihat hasilnya kemudian hapus tanda hash.
Versi ini - seperti yang disarankan dalam komentar - menyimpan beberapa karakter dan terlihat sedikit lebih jelas.
sumber
egrep
argumen ke"^(file1|filename2|f1le)$"
a
,b
dana b
program pertama akan menghapus - jika Anda memasukkan ab ke dalam bagian grep:"^[ab]$"
a
danb
tetapi tidaka b
, lawan saja dari niat Anda. Perintah kedua akan melakukan hal yang sama. Dan yang ketiga juga. Anda seharusnya tidak menggunakan 'ls' dalam skrip, dengan pengecualian yang sangat, sangat jarang. Tapi jangan lakukan itu.Pindahkan file yang ingin Anda simpan. Naik satu tingkat, hapus folder. Buat kembali folder dan pindahkan file-file itu kembali.
sumber
/
, heh? Tidak terlalu praktis. c) Mencoba menghapus semua file di komputer Anda$HOME
juga tidak terlalu praktis.Ini yang saya atur sebagai skrip .sh untuk kait logout OSX / MacOS, berfungsi cukup baik.
sumber
Dengan GNU-find Anda dapat menggunakan -delete switch, yang menghapus direktori, jika kosong juga:
sumber
find tmp -maxdepth 1 -not -name X -not -name Y -not -name Z -delete
adalah salah satu cara untuk mengatasi ini.tmp
juga jika tidak adaX
/Y
/Z
file di dalamnya. Catatan!
sebagai standar yang setara dengan GNU-not
(-delete
juga merupakan ekstensi GNU)