массовая распаковка файлов gzip без расширения gz

Я считаю, что ответ - извлечь диск и снова вставить его. Вы можете запустить

diskutil eject /dev/disk1

в терминале, заменив 1 в / dev / disk1 на номер диска рассматриваемого диска.

7
22.12.2016, 20:10
3 ответа

Не используйте gzip, вместо этого используйте zcat, который не ожидает расширения. Вы можете сделать все за один раз. Просто попытайтесь zcat файл и, если это не удастся, потому что он не сжат, cat его вместо этого:

for f in *; do 
    ( zcat "$f" || cat "$f" ) > temp && 
    mv temp "$f".ext && 
    rm "$f" 
done

Сценарий выше сначала попытается zcat файл в temp и, если это не удастся (если файл не в формате gzip), он просто cat его. Это выполняется в подпрограмме для перехвата вывода любой команды и перенаправления его в временный файл (temp). Затем temp переименовывается в оригинальное имя файла плюс расширение (.ext в данном примере), а оригинал удаляется.

5
27.01.2020, 20:16

Вы можете сделать что-то вроде

for f in ./*
do 
gzip -cdfq "$f" > "${f}".some_ext
done

Это обрабатывает все файлы (даже несжатые, через -f ) и записывает (через -c ) вывод на stdout с использованием перенаправления для сохранения содержимого каждого файла в его аналоге .some_ext . Затем вы можете удалить оригиналы, например. с bash

shopt extglob
rm -f ./!(*.some_ext)

или zsh

setopt extendedglob
rm -f ./^*some_ext

Вы даже можете сохранить полученные файлы в другом каталоге (на этот раз при условии, что вы хотите удалить исходное расширение), например.

for f in *
do 
gzip -cdfq -- "$f" > /some/place/else/"${f%.*}".some_ext
done

, а затем удалить все в текущем каталоге ...

4
27.01.2020, 20:16

Здесь будет представлен список всех файлов, сжатых с помощью gzip:

file /path/to/files | grep ': gzip compressed data' | cut -d: -f1

Чтобы добавить расширение .gz к любым gzip-файлам, можно воспользоваться следующим уродливым хаком:

for file in ./*; do
    if gzip -l "$file" > /dev/null 2>&1; then
        case "$file" in
          *.gz) :;; # The file already has the extension corresponding to its format
          *) mv "$file" "${file}.gz";;
        esac
        # Uncomment the following line to decompress them at the same time
        # gunzip "${file}.gz"
    fi
done
3
27.01.2020, 20:16

Теги

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