Сжать несколько файлов и переименовать их

Сжать несколько файлов и переименовать их

Я хочу узнать, возможно ли gunzipпереименовать несколько файлов с помощью одной команды/скрипта.

У меня есть куча файлов в формате:

test.20120708191601.DAT.3599502593.gz
test.20120708201601.DAT.99932140.gz
test.20120708204600.DAT.1184686967.gz
test.20120708212100.DAT.824089664.gz
test.20120708215100.DAT.1286044098.gz
test.20120708222100.DAT.1414234861.gz

Мне нужно gunzipих и удалить все после .DAT, чтобы получить формат:

test.20120708191601.DAT
test.20120708201601.DAT
test.20120708204600.DAT
test.20120708212100.DAT
test.20120708215100.DAT
test.20120708222100.DAT

решение1

Попробуй это:

for file in *.gz; do
  gunzip -c "$file" > "${file/.DAT*/.DAT}"
done

Подход использует gunzipопцию для вывода несжатого потока на стандартный вывод ( -c), поэтому мы можем перенаправить его в другой файл без второго вызова переименования. Переименование выполняется в самой переменной filename с использованием bashподстановки (сопоставьте любой шаблон подстановки .DAT*и замените его на .DAT). Сам цикл просто перебирает файлы в текущем каталоге с именами, заканчивающимися на .gz.

Связанный контент