Saya perlu gzip semua file dalam direktori secara terpisah termasuk semua file dalam sub-direktori tanpa menghapus yang asli sesudahnya. Jadi katakanlah saya memiliki index.html, saya ingin memiliki di akhir index.html.gzip DAN index.html.
Saya dapat gzip semua file di dir saya via
gzip -r .
Tapi saya juga ingin menyimpan file aslinya.
Apakah ini mungkin?
*.*
masukls
?*.*
cocok dengan semua file yang diberi nama secara teratur, dan biasanya tidak ada direktori. Tentu saja, ini hanya berfungsi dalam banyak kasus dan biasanya tidak jika Anda membutuhkannya. Kemudian gunakanfind
perintah.ls *.*
tidak akan memilih file seperti TODO .ls
tidak diperlukan sama sekali :for x in *
. Namun,find
harus menggunakanfind . -type f | while read -r x
.-r
menghidupkanread
.Anda dapat dengan mudah beralih untuk memasukkan apa yang ingin Anda kompres (
-name '*.txt -or -name '*.html
dll.) Daripada seperti sekarang, mengecualikan beberapa file (sudah dikompresi, cadangan dan file sementara).Menangani spasi dalam nama file juga.
Ubah
gzip
keecho gzip
untuk pengujian. Atau lewati bagian -exec bersama-sama.Sunting: Oh, saya lupa menyebutkan bahwa ini tidak memeriksa apakah
<target>.gz
sudah ada. Ini mungkin atau mungkin tidak menjadi masalah.Edit2: Ok, ini dia sesuatu yang memeriksa file yang ada. Jika itu mungkin diinginkan. Maafkan oneliney-ness.
My
find
-foo mungkin bukan apa yang bisa dilakukan, sangat mungkin untuk langsung lewati.sumber
Cukup tambahkan opsi -c, saya pikir ini harus bekerja
sumber
gzip 1.6 (Juni 2013) menambahkan
-k, --keep
opsi, jadi sekarang Anda dapat:Ditemukan di: /unix/46786/how-to-tell-gzip-to-keep-orepinal-file
sumber
Diuji pada Debian (gzip 1.3.12-6)
sumber
ls
tidak perlu, gunakan*
.