GNU/Linux >> Belajar Linux >  >> Linux

Grep Word Dalam File Lalu Salin File?

Saya memiliki koleksi file ( *.zip, *.txt, *.tar.gz, *.doc, …etc). File-file ini berada dalam jalur. Saya ingin mencari semua file ( *.txt), lalu salin, hanya file teks yang berisi kata-kata tertentu (misalnya LINUX/UNIX).

Saya menjalankan yang berikut ini:

find . -name "*.txt" | grep 'LINUX/UNIX'

Perintah ini dapat menemukan semua file teks, kemudian "grep" memfilter file teks yang dihasilkan dengan hanya mencantumkan file teks yang berisi 'LINUX/UNIX'.

Bagaimana cara menyalin file akhir ini (yaitu file teks yang berisi 'LINUX/UNIX') ke jalur pilihan tertentu?

Saya mencoba menerapkan xargs

find . -name "*.txt" | grep 'LINUX/UNIX' | xargs cp <to a path>

Tapi tidak berhasil

Jawaban yang Diterima:

Coba:

grep -rl --null --include '*.txt' LINUX/UNIX . | xargs -0r cp -t /path/to/dest

Karena perintah ini menggunakan pemisahan NUL, maka aman untuk semua nama file termasuk yang dengan nama sulit yang menyertakan kosong, tab, atau bahkan baris baru.

Di atas membutuhkan GNU cp . Untuk MacOS/FreeBSD, coba:

grep -rl --null --include '*.txt' LINUX/UNIX . | xargs -0 sh -c 'cp "[email protected]" /path/to/dest' sh

Cara kerjanya:

  1. grep opsi dan argumen

    • -r memberitahu grep untuk mencari secara rekursif melalui struktur direktori. (Di FreeBSD, -r akan mengikuti symlink ke direktori. Ini tidak berlaku untuk OS/X atau versi terbaru dari GNU grep .)

    • --include '*.txt' memberitahu grep untuk hanya mengembalikan file yang namanya cocok dengan glob *.txt (termasuk yang tersembunyi seperti .foo.txt atau .txt ).

    • -l memberi tahu grep untuk hanya mengembalikan nama file yang cocok, bukan yang cocok itu sendiri.

    • --null memberitahu grep untuk menggunakan karakter NUL untuk memisahkan nama file. (--null didukung oleh grep di bawah GNU/Linux, MacOS dan FreeBSD tapi tidak OpenBSD.)

    • LINUX/UNIX memberitahu grep untuk hanya mencari file yang isinya menyertakan regex LINUX/UNIX

    • . cari di direktori saat ini. Anda dapat menghilangkannya di versi terbaru GNU grep , tetapi kemudian Anda harus memberikan -- opsi terminator ke cp untuk menjaga dari nama file yang dimulai dengan - .

  2. xargs opsi dan argumen

    • -0 memberi tahu xargs untuk mengharapkan input yang dipisahkan NUL.

    • -r memberitahu xargs untuk tidak menjalankan perintah kecuali setidaknya satu file ditemukan. (Opsi ini tidak diperlukan pada BSD atau OSX dan tidak kompatibel dengan xargs OSX .)

    • cp -t /path/to/dest menyalin direktori ke direktori target. (-t membutuhkan GNU cp .)


Linux
  1. Bagaimana Menyoroti Kata Dalam Output "kucing"??

  2. Ekstrak File Dalam File Exe?

  3. Salin konten file ke clipboard di terminal Linux

  1. Salin file di terminal Linux

  2. Pindahkan file di terminal Linux

  3. Grep Untuk Beberapa String Dalam File, Dan Kemudian Buat Daftar File Dalam Urutan Ukuran?

  1. Pipa Ke Banyak File Di Shell?

  2. Alat Transfer File Terbaik di Linux

  3. Bagaimana cara menggunakan perintah Rsync di linux?