GNU/Linux >> Belajar Linux >  >> Linux

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

Saya memiliki direktori dengan 1000+ file. Dalam file teks, saya memiliki sekitar 50 nama file, satu per baris. Saya ingin menghapus semua file di direktori yang nama filenya tidak sesuai dengan entri dalam daftar. Apa cara terbaik untuk melakukan ini? Saya memulai skrip shell, tetapi tidak dapat menentukan perintah yang tepat untuk menentukan nama file dalam daftar. Terima kasih.

Jawaban yang Diterima:

Saya menyadari bahwa setiap pertanyaan yang menanyakan cara menghapus file harus ditangani dengan sangat hati-hati.
Jawaban pertama saya terlalu tergesa-gesa. Saya tidak menganggap fakta bahwa daftar file dapat salah format untuk digunakan dengan egrep. Saya mengedit jawaban untuk mengurangi risiko itu.

Itu seharusnya berfungsi untuk file yang tidak memiliki ruang di namanya:

Pertama-tama buat kembali daftar file Anda untuk memastikan kecocokan dengan nama file yang tepat:

sed -e 's,^,^,' -e 's,$,$,'  filelist  > newfilelist 

buat perintah rm

cd your_directory
ls | egrep -vf newfilelist   | xargs -n 1 echo rm  >  rmscript

Periksa apakah skrip rm cocok untuk Anda (Anda dapat melakukannya dengan "vim" atau "kurang").
Kemudian lakukan tindakan :

sh -x rmscript

Jika file memiliki spasi di namanya (jika file memiliki " atas nama maka ini tidak akan berfungsi) :

ls | egrep -vf newfilelist  | sed 's,^(.*)$,rm "1",' > rmscript

tentu saja daftar file tidak boleh berada di direktori yang sama!

DIEDIT :

Daftar file Nathan berisi nama yang cocok dengan semua file dalam direktori (seperti "html" cocok dengan "bob.html"). Jadi tidak ada yang dihapus karena egrep -vf menyerap semua aliran. Saya menambahkan perintah untuk meletakkan "^" dan "$" di sekitar setiap nama file. Saya beruntung di sini bahwa daftar file Nathan benar. Apakah itu telah diformat DOS dengan garis akhir CR-LF atau dengan spasi tambahan, tidak ada file yang akan diawetkan oleh egrep dan semuanya telah dihapus.


Linux
  1. 3 Cara Menghapus Semua File di Direktori Kecuali Satu atau Beberapa File dengan Ekstensi

  2. Hapus File Dan Direktori Dengan Nama Mereka. Tidak ada berkas atau direktori seperti itu?

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

  1. Hapus symlink ke direktori

  2. perintah linux untuk mengosongkan semua file direktori

  3. daftar/temukan semua file biasa di semua subdirektori tidak termasuk file biner

  1. Menggunakan scp untuk mentransfer file .txt daftar file

  2. Bagaimana cara mengatur izin file default untuk semua folder/file dalam direktori?

  3. Bagaimana saya bisa menghapus semua file dari direktori ketika melaporkan daftar Argumen terlalu lama