Итак, у меня есть около 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 и окна.
обновление
Сайрус дал мне идеальный ответ, проблема в том, что мой вопрос был недостаточно точным:) теперь, когда я умнее, вот следующий набор проблем, которые я еще не понял, как обойти:
так что все работает отлично, если это не происходит:
file_123(abc).foo
file_123456789(b9).foo
эти двое не должны быть сгруппированы, т. е. они должны оказаться в двух отдельных файлах:
file_123.7z
file_123456789.7z
этот one:
for pfx in $(for i in *.foo; do echo "${i%%[.(]*}"; done | sort -u); do 7z a "$pfx.7z" $pfx*; done
создает эти два по отдельности,но короткий файл работает как универсальный, т. е. file_123.7z
включает оба файла, что не должно.