GNU/Linux >> Belajar Linux >  >> Linux

Gunakan grep untuk menemukan konten dalam file dan memindahkannya jika cocok

Inilah yang saya gunakan di Fedora Core 12:

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR

Jika Anda ingin mencari dan memindahkan file yang tidak sesuai dengan pola Anda (pindahkan file yang tidak mengandung 'Subject \[SPAM\]' dalam contoh ini) gunakan:

grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR

-Z berarti output dengan nol (\0) setelah nama file (jadi spasi tidak digunakan sebagai pembatas).

xargs -0

berarti menafsirkan \0 menjadi pembatas.

-L berarti menemukan file yang tidak cocok dengan polanya. Ganti -L dengan -l jika Anda ingin memindahkan file yang cocok dengan pola Anda.

Lalu

-I{} mv {} DIR

berarti ganti {} dengan nama file, jadi Anda mendapatkan mv filenames DIR .


Inilah yang membantu saya:

grep -lir 'spam' ./ | xargs mv -t ../spam

Tentu saja, saya sudah berada di folder wajib (itu sebabnya ./ ) dan memindahkannya ke folder tetangga. Namun Anda dapat mengubahnya ke jalur apa pun.

Saya tidak tahu mengapa jawaban yang diterima tidak berhasil. Saya juga tidak memiliki spasi dan karakter khusus dalam nama file - mungkin ini tidak akan berhasil.

Dicuri di sini:perintah Grep untuk menemukan file yang berisi string teks dan memindahkannya


Alternatif ini berfungsi saat xargs tidak tersedia:

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done

Linux
  1. Temukan Pola Dan Pindahkan?

  2. Gunakan Perintah Grep Dan Cari?

  3. Bagaimana Menemukan Banyak String Dalam File??

  1. Gunakan Temukan dan Temukan untuk mencari file di Linux

  2. Temukan dan salin file

  3. Bagaimana cara mencari direktori dan menemukan file yang cocok dengan regex?

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

  2. Temukan file dan tar (dengan spasi)

  3. Bagaimana cara membuat daftar file secara rekursif dan mengurutkannya berdasarkan waktu modifikasi?