сжать файл с помощью / bin / gzip с определенными шаблонами

Вы не можете использовать escape \ в цитате '' . Поэтому поместите все в цитату "" и экранируйте " сегмент " s / ^ \ "'/' / g"

В качестве альтернативы завершите ' ' цитата, введите \' , затем снова начните цитату '' , например 's / ^ "' \ '' / '\' '/ g'

Также, если вас легко сбивают с толку \ s и / s, тогда обратите внимание, что вам не обязательно использовать / s в качестве разделителей. Вы можете использовать любой символ, например "s% ^ \" '%'% g "


Это только первая кавычка в начало строки, бит, с которым вы, кажется, боретесь.

1
17.04.2018, 13:51
2 ответа

find +bashраствор:

find /log -type f -name "*.1" -exec bash -c 'gzip -nc "$1" > "${1:0:-2}.gz"; rm "$1"' _ {} \;

gzipопции:

  • -n-при сжатии не сохранять оригинальное имя файла и отметку времени по умолчанию
  • -c-запись вывода на стандартный вывод; оставить исходные файлы без изменений

${1:0:-2}-bash's нарезка ; получить путь к файлу с усеченными последними 2 символами

3
27.01.2020, 23:18

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

find /log -name '*.1' -type f -exec sh -c '
  for file do
    gzip "$file" && mv -i "$file.gz" "${file%.*}.gz"
  done' sh {} +

Мы используем gzip file && mv -i file.gz newfileвместо gzip < file > newfile && rm -f file, чтобы извлечь выгоду из способности gzipсохранять некоторые метаданные в сжатом файле и для лучшей способности mv -iсправляться с конфликтами.

1
27.01.2020, 23:18

Теги

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