ls | while read filename; do tar -czvf "$filename".tar.gz "$filename"; rm "$filename"; done
Команда ls
выводит список файлов и директорий в текущей директории. Затем эти файлы передаются в цикл while
, где каждое имя файла читается в переменную filename
. Внутри цикла выполняются следующие действия: архивация файла с помощью tar -czvf
, создаётся архив с именем filename.tar.gz
, содержащий исходный файл filename
, а затем исходный файл удаляется с помощью rm
.
Эта команда полезна, если нужно сжать каждый файл в директории отдельно. Альтернативой может быть использование цикла for
вместо while
, если известно, что файлы не содержат пробелов или специальных символов. Если файлы содержат пробелы или специальные символы, можно использовать команду find
вместо ls
, чтобы получить список файлов без проблем с обработкой специальных символов. Аргументы команды — отсутствуют.