Saya ingin menghapus semua file dalam direktori sambil meninggalkan hanya beberapa file yang ditentukan, mereka tidak memiliki kesamaan nama. Bagaimana saya bisa mencapainya?
Misalnya, nama file yang ingin saya simpan adalah:
file_1.png
, another_file.jpg
,some_music.mp3
command-line
files
rm
AGamePlayer
sumber
sumber
shopt -u extglob
).Buat subdirektori
tmp
, pindahkan semua file yang ingin Anda simpan ke direktori itu dan lakukanrm -f *
setelahnya. Itu tidak akan mempengaruhitmp
direktori.Setelah itu lakukan saja:
(Dengan asumsi tidak ada file yang Anda pindahkan dimulai dengan titik).
Ini adalah salah satu dari beberapa kasus di mana masuk akal untuk menggunakan mouse dan browser file seperti Nautilus di mana Anda benar-benar dapat Ctrl-klik beberapa file yang ingin Anda simpan dan kemudian gunakan menu:
Edit -> Invert Selection
untuk mendapatkan file lain dan kemudian menghapusnya .sumber
ls
untuk melihat apakah Anda tidak melewatkan file yang ingin Anda pertahankan.Tambahkan nama file yang ingin Anda simpan ke file teks, satu per baris. File ini seharusnya tidak ada di direktori atau Anda harus menambahkan namanya juga.
Jika nama direktori Anda adalah foo dan nama file adalah bar , lakukan hal berikut.
Ini melakukan hal berikut:
find -type f
mencari nama semua file di foo dan subdirektori dan mencetaknya ke STDOUT. Dengan opsi-print0
itu membatasi nama file dengan byte NUL.grep -v -f bar
mengecualikan semua nama file yang cocok dengan baris di bar . Dengan opsi-z
itu memperlakukan inputnya sebagai seperangkat garis yang dibatasi oleh byte NUL, dengan opsi-Z
itu membatasi outputnya dengan byte NUL.xargs rm
panggilanrm
berulang kali untuk menghapus file. Dengan opsi-0
itu memperlakukan inputnya sebagai seperangkat garis yang dibatasi oleh NUL byte.Ini berfungsi dengan nama file yang mengandung spasi.
sumber
find
saya lebih suka melakukannyafind . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -vi {} +