Jadi saya punya sekitar 20.000 file yang ingin saya kompres dan kelompokkan dengan mengikuti logika:
- kompres setiap file yang memiliki karakter identik hingga
(
- juga termasuk file yang tidak memiliki
(
Jadi file-file itu seperti
file_123.foo
file_123(abc).foo
file_123(b9)(ca)[a1].foo
foobar(a).foo
foobar.foo
foobar(123).foo
yang harus dikompresi
file_123.7z
foobar.7z
Saya terbuka untuk file batch windows, skrip unix atau program kompresi apa pun (saya dapat bekerja dari sana), meskipun kombo yang paling nyaman adalah .7z dan windows.
MEMPERBARUI
cYrus memberi saya jawaban yang sempurna, masalahnya adalah pertanyaan saya tidak cukup tepat :) Sekarang saya lebih pintar, inilah serangkaian masalah berikutnya yang belum saya temukan bagaimana cara menyiasati:
Jadi semuanya bekerja dengan sempurna kecuali ini terjadi:
file_123(abc).foo
file_123456789(b9).foo
Kedua tidak boleh dikelompokkan, yaitu, mereka harus berakhir di dua file terpisah:
file_123.7z
file_123456789.7z
Yang ini:
for pfx in $(for i in *.foo; do echo "${i%%[.(]*}"; done | sort -u); do 7z a "$pfx.7z" $pfx*; done
membuat keduanya secara terpisah, tetapi file yang lebih pendek berfungsi sebagai catch-all, yaitu file_123.7z
menyertakan kedua file, yang seharusnya tidak.
Jawaban:
Linux
Ini seharusnya bekerja:
Penjelasan
Pertama-tama kita harus mengulang seluruh file input (
*.foo
) dan menghapus suffix (${i%%[.(]*}
) untuk mendapatkan:Kemudian kita dapat menghapus duplikat dengan
sort -u
:Akhirnya untuk setiap awalan (
$pfx
) kita dapat membangun arsip menggunakan awalan itu sendiri baik sebagai nama arsip ("$pfx.7z"
) dan pola untuk mengidentifikasi file ($pfx[.\(]*
); mendapatkan yang setara dengan:sumber
Oke, daripada hanya memberi Anda skrip shell, saya akan menunjukkan menu konteks 7zips.
Langkah 1 : Buka folder Anda dengan semua file ini masuk
Langkah 2 : Klik pada "Nama" untuk memesan semua file dengan namanya (Ini akan memudahkan untuk memilih file dengan awal nama yang mirip).
Langkah 3 : Dengan tombol kanan mouse, seret dan letakkan kotak pilih di atas semua file yang ingin Anda kompres dalam satu file (Jadi, foobar (a) .foo, foobar.foo, foobar (123) .foo)
Langkah 4 : Ketika Anda melepaskan tombol mouse kanan, menu konteks akan muncul. Buka 7Zip> Tambahkan ke PARENT_DIRECTORY.7z
Di mana PARENT_DIRECTORY adalah nama folder tempat file-file ini berada. Jadi jika folder tempat Anda berada dipanggil, 'file' itu akan menambahkannya ke 'file.7z'
Langkah 5 : Ganti nama file terkompresi baru ini dengan mengklik kanan file 7Zip baru dan mengklik 'Ganti nama'.
sumber