Gunakan -T
fitur tar untuk memintanya membaca daftar file dari file lain (tar memperlakukan setiap baris sebagai file terpisah).
Anda kemudian dapat menggunakan <()
notasi agar shell Anda menghasilkan file pseudo dari output perintah:
tar cf ctlfiles.tar -T <(find /home/db -name "*.ctl")
Jika shell Anda tidak mendukung <()
notasi, Anda dapat menggunakan file sementara:
find /home/db -name "*.ctl" > ctlfile-list
tar cf ctlfiles.tar -T ctlfile-list
rm ctlfile-list
Anda dapat menggunakan fitur -print0 dari find dengan fitur -0 dari xargs, seperti ini:
find /home/db -name '*.ctl' -print0 | xargs -0 tar -cf ctlfiles.tar
-print0 (itu adalah tanda hubung-cetak-nol) memberi tahu find untuk menggunakan null sebagai pembatas antara jalur alih-alih spasi, dan -0 (itu adalah tanda hubung nol) memberi tahu xargs untuk mengharapkan hal yang sama.
Diedit untuk menambahkan:
Jika Anda memiliki banyak file, xargs mungkin memanggil tar lebih dari sekali. Lihat komentar untuk mengetahui cara mengatasinya, atau buat find aktifkan tar secara langsung, seperti ini, yang berfungsi dengan sejumlah file, meskipun memiliki spasi atau baris baru di namanya:
rm -f ctlfiles.tar
find /home/db -name '*.ctl' -exec tar -rf ctlfiles.tar {} +
Ketika argumen yang mengikuti "-T" adalah "-", daftar file diambil dari stdin. Versi tar terbaru biasanya mendukung opsi "-null", yang menunjukkan bahwa file diberikan dalam sumber yang ditentukan oleh "-T " opsi dipisahkan dengan null.
Oleh karena itu berikut ini berfungsi dengan jumlah file yang berubah-ubah, mungkin berisi karakter baris baru:
find /home/db -name '*.ctl' -print0 | tar --null -T - -cf ctlfiles.tar