Запись на диск и одновременное сжатие с помощью xz

Вы можете сделать это, используя версии GNU findи mv, вот так:

find. -mindepth 2 -maxdepth 2 -type f -execdir mv -vt./folder/. {} +

Где мы ограничиваем findпоиск обычных файлов на 2 уровня в глубину, а затем с помощью опции -execdirперемещаем выбранный файл (с )в подкаталог folder, который со -смежным в выбранный файл (s ).

5
16.07.2019, 03:11
1 ответ

Если ваш ./runбудет выводить свой вывод на стандартный вывод, если не задан файловый аргумент (, который является обычным в Unix/Linux ), тогда вы можете просто использовать:

./run | xz -c >output.txt.xz

Если ему нужен аргумент имени файла, но если запись в канал работает нормально, вы можете использовать либо специальное устройство, такое как /dev/stdoutили/dev/fd/1(оба должны быть эквивалентны ), например:

./run /dev/stdout | xz -c >output.txt.xz

Или вы можете использовать подстановку процесса , которая обычно доступна в большинстве современных оболочек, таких как bash, zsh или ksh, которая в конечном итоге будет использовать устройство из /dev/fdза кулисами для выполнения то же:

./run >(xz -c >output.txt.xz)

Этот последний также нуждается в ./run, чтобы иметь возможность писать в канал, но он должен работать лучше, чем другие, если ./runзаписывает вoutput.txtи в стандартный вывод в своей нормальной работе, в которой случае вывод будет перепутан, если вы перенаправите оба на стандартный вывод.

Программы обычно нормально записывают в канал, но некоторые из них могут захотеть выполнить поиск и перемотать смещения в выходном файле, что невозможно в канале. Если это так, то запись во временный файл, а затем его сжатие, вероятно, все, что вы можете сделать.

17
27.01.2020, 20:31

Теги

Похожие вопросы