Итак, у меня есть около 20 000 файлов, которые я хочу сжать и сгруппировать по следующей логике:
- сжать каждый файл с одинаковыми символами до
(
- также включить файлы, которые не имеют
(
Так что файлы похожи
file_123.foo
file_123(abc).foo
file_123(b9)(ca)[a1].foo
foobar(a).foo
foobar.foo
foobar(123).foo
который должен быть сжат до
file_123.7z
foobar.7z
Я открыт для пакетных файлов Windows, сценариев Unix или любой программы сжатия (я могу работать оттуда), хотя наиболее удобная комбинация будет .7z и Windows.
ОБНОВИТЬ
cYrus дал мне идеальный ответ, проблема была в том, что мой вопрос не был достаточно точным :) Теперь, когда я умнее, вот следующий набор проблем, которые я еще не выяснил, как обойти это:
Так что все работает отлично, если это не происходит:
file_123(abc).foo
file_123456789(b9).foo
Эти два не должны быть сгруппированы, то есть они должны быть в двух отдельных файлах:
file_123.7z
file_123456789.7z
Вот этот:
for pfx in $(for i in *.foo; do echo "${i%%[.(]*}"; done | sort -u); do 7z a "$pfx.7z" $pfx*; done
создает эти два отдельно, но более короткий файл работает как универсальный , то есть file_123.7z
включает оба файла, чего не должно быть.