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.