Saya memiliki folder yang berisi sekitar 320116 file .pdb.gz. Saya ingin membuka kompres mereka semua. Jika saya menggunakan gunzip * .gz itu memberi saya kesalahan yaitu daftar argumen terlalu panjang. Folder ini sekitar 2GB. Tolong beri saya saran yang tepat.
13
Jawaban:
-exec gunzip {} +
akan memberikangunzip
banyak tetapi tidak terlalu banyak nama file pada baris perintahnya. Ini lebih efisien daripada-exec gunzip {} \;
yang memulaigunzip
proses baru untuk setiap file.sumber
find
, lebih sedikitgunzip
!find
memungkinkan notasi "+". Lihat, misalnya, yangfind
halaman manual untuk BSD 10.1 . Juga berlaku untuk OS X (setidaknya 10.9 atau lebih baru, mungkin lebih awal).Setiap kali Anda mendapatkan kesalahan "daftar argumen terlalu lama", Anda dapat mengatasinya dengan menjalankan perintah yang diinginkan beberapa kali, setiap kali dengan subset argumen yang ingin Anda gunakan.
xargs
adalah alat yang membantu Anda melakukannya secara otomatis.sumber
-execdir gunzip "{}" \;
xargs yang akan memanggil gunzip secara terpisah untuk setiap file? Itu adalah bacaan saya tentang halaman manual.xargs
akan memuat sebanyak mungkin nama file yang sesuai padagunzip
baris perintah. Cobalah!echo a b c d e f | xargs echo
hanya memanggilecho
sekali dengan semua 6 argumen sehingga Anda melihat satu baris output (cukup perintah yang tidak berguna untuk dijalankan !!!!) sementara jika Anda memaksaxargs
untuk hanya menyediakan hingga 3 argumen per doa perintah menggunakanecho a b c d e f | xargs -n 3 echo
maka Anda mendapatkan 2 baris output .xargs
adalah bahwa, dengan-P
opsi, Anda dapat menjalankan beberapagunzip
proses secara paralel, yang (tergantung pada parameter yang tepat dari sistem Anda) dapat berjalan lebih cepat.-P
, @psmears. Sekarang saya belajar sesuatu juga!Saya pikir ini harus bekerja, melewati jalur / nama setiap file secara individual ke gunzip untuk diproses:
sumber
find
dengan+
danxargs
secara tegas perancang dengan masalah itu dalam pikiran. Mereka akan selalu memberikan argumen sebanyak mungkin, sementara tidak melebihi batas sistem operasi. Karena, omong-omong, ini adalah batas sistem operasi, tidak ada hubungannya dengangunzip
.Coba dengan cara ini:
sumber
gunzip
sekali per file. Lihat jawaban John1024 untuk cara yang sedikit berbeda yang menghindari ketidakefisienan itu.Jika Anda memiliki mesin multi-core Anda mungkin akan melihat bahwa menggunakan
gunzip
tidak akan memaksimalkan kemampuan mesin Anda. Untuk itu Anda perlu menjalankan beberapagunzip
s secara paralel. Untuk melacak yang dilakukan di mana terminal dengan tangan itu rumit, tetapi Anda dapat dengan mudah melakukannya dengan GNU paralel:sumber
parallel
terlalu panjang?find
terlalu panjang?find
baris perintah.-name
Tidak perlu digunakan
find
untuk ini, karena Anda tidak menyebutkan subfolder. Yang perlu Anda lakukan adalah:sumber
find
jika Anda tidak ingin menelurkan 320116gunzip
proses, seperti halnya loop ini.