Сортировка несжатого содержимого многих сжатых файлов и сохранение результата в несжатом файле:
find. -type f -name '*.gz'
-exec sh -c 'for n; do zcat "$n" | sort -o "$n.txt"; done' sh {} +
Это выполнит цикл for
for n; do
zcat "$n" | sort -o "$n.txt"
done
с максимально возможным количеством файлов одновременно. Цикл for
, в котором нет in X
, будет повторяться по "$@"
по умолчанию.
Оболочка sh -c
будет вызываться find
с максимально возможным количеством путей к файлам (из-за +
вместо \;
в конце ), и эти пути будут доступны для оболочка sh -c
в $@
.
В исходной команде
find. -name *.gz -exec zcat {} | sort > {}.txt \;
у вас проблемы:
*.gz
не заключен в кавычки, что означает, что оболочка будет выполнять подстановку имени файла с именами файлов в текущем каталоге.
-exec
может работать только с простой командой, а не с конвейером.
Вы не ограничиваетесь обычными файлами, что теоретически означает, что вы можете выбрать каталог с именем something.gz
.
Я часами копался в Интернете и, наконец, случайно нашел неловкое решение самостоятельно:
Папка Maildir (по какой причине когда-либо )имеет заглавную D MailDir в папке для UserA.