Sebagai solusi yang kuat, gunakan find
untuk memisahkan nama file dengan karakter null, lalu menyalurkan langsung ke tar
, yang membaca input yang dibatasi null:
find . -maxdepth 1 -name '*.csv' -print0 |
tar -czf archive.tgz --null -T -
Ini sekarang akan menangani semua nama file dengan benar dan juga tidak dibatasi oleh jumlah file.
Menggunakan ls
untuk menghasilkan daftar nama file yang akan diuraikan oleh program lain adalah antipattern umum yang harus dihindari sebisa mungkin. find
dapat menghasilkan output yang dipisahkan null (-print0
) yang dapat dibaca atau diuraikan lebih lanjut oleh sebagian besar utilitas. Karena karakter null adalah satu-satunya karakter yang tidak dapat muncul dalam nama file (dan /
, tentu saja), Anda akan selalu aman dengan itu.
Tidak, Anda tidak dapat menambahkan file tar terkompresi tanpa membuka kompresinya terlebih dahulu.
Namun, tar dapat menerima daftar filenya untuk diproses dari sebuah file, jadi Anda cukup melakukan:
ls *.csv > temp.txt
tar -zcf ball.tgz -T temp.txt
@slhck menunjukkan bahwa solusi di atas tidak akan berfungsi jika ada spasi (dan mungkin karakter lain yang mengganggu) di nama file Anda. Versi ini menyertakan setiap nama file dalam tanda kutip ganda:
ls *.csv | sed -e 's/^\(.*\)$/"\1"/' > temp.txt
tar -zcf ball.tgz -T temp.txt
(Ini tentu saja akan rusak jika Anda memiliki tanda kutip ganda di nama file Anda, dalam hal ini Anda mendapatkan apa yang pantas Anda dapatkan. :)