GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana membuat tar terkompresi ketika ada terlalu banyak nama file untuk diperluas oleh shell dalam satu baris?

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. :)


Linux
  1. Cara Mengekstrak File tar.gz di Linux dengan Menggunakan Command Line

  2. Apakah Ada Konvensi Penamaan Untuk Variabel Dalam Skrip Shell?

  3. Bagaimana Cara Menampilkan Karakter Kontrol (^c, ^d, ^[, ...) Secara Berbeda Di Shell?

  1. Bagaimana Cara Mengubah Panjang Baris Default Untuk Od Dan Hexdump?

  2. Bagaimana Tanda Kurung Diinterpretasikan Pada Baris Perintah?

  3. Bagaimana Cara Membuat Terminal Autocomplete Saat Ada Beberapa File/direktori?

  1. Cara Membuat Sudo Mengingat Kata Sandi Lebih Lama

  2. [Linux] :Cara mengecualikan direktori saat menggunakan perintah shell "tar"

  3. Bagaimana Cara Bergabung dengan Baris Berikutnya Ketika Sebuah Baris Sesuai Dengan Regex Untuk Seluruh Dokumen Di Vi?