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:
-
grepopsi dan argumen-
-rmemberitahu grep untuk mencari secara rekursif melalui struktur direktori. (Di FreeBSD,-rakan mengikuti symlink ke direktori. Ini tidak berlaku untuk OS/X atau versi terbaru dari GNUgrep.) -
--include '*.txt'memberitahu grep untuk hanya mengembalikan file yang namanya cocok dengan glob*.txt(termasuk yang tersembunyi seperti.foo.txtatau.txt). -
-lmemberi tahu grep untuk hanya mengembalikan nama file yang cocok, bukan yang cocok itu sendiri. -
--nullmemberitahu grep untuk menggunakan karakter NUL untuk memisahkan nama file. (--nulldidukung olehgrepdi bawah GNU/Linux, MacOS dan FreeBSD tapi tidak OpenBSD.) -
LINUX/UNIXmemberitahu grep untuk hanya mencari file yang isinya menyertakan regexLINUX/UNIX -
.cari di direktori saat ini. Anda dapat menghilangkannya di versi terbaru GNUgrep, tetapi kemudian Anda harus memberikan--opsi terminator kecpuntuk menjaga dari nama file yang dimulai dengan-.
-
-
xargsopsi dan argumen-
-0memberi tahu xargs untuk mengharapkan input yang dipisahkan NUL. -
-rmemberitahu xargs untuk tidak menjalankan perintah kecuali setidaknya satu file ditemukan. (Opsi ini tidak diperlukan pada BSD atau OSX dan tidak kompatibel denganxargsOSX .) -
cp -t /path/to/destmenyalin direktori ke direktori target. (-tmembutuhkan GNUcp.)
-