Как я извлекаю все .htaccess файлы из tarball?

GNU getopt команда использует GNU getopt () библиотечная функция, чтобы сделать парсинг аргументов и опций.

Страница справочника getopt (3) состояния:

Если getopt () не распознает символ опции, он печатает сообщение об ошибке к stderr, хранит символ в optopt, и возвраты ?. Программа вызова может предотвратить сообщение об ошибке путем установки opterr к 0.

Поэтому ? используется для передачи сигналов "о неизвестной опции" и не может использоваться в качестве значения опции. (Было бы невозможно сказать опцию -? от неизвестной опции.)

6
23.02.2012, 01:38
5 ответов

Tar GNU поддерживает "-подстановочные знаки" опция.

tar tvfz file.tar.gz --wildcards '*/.htaccess'
10
27.01.2020, 20:21
  • 1
    Ничего себе, я даже не рассмотрел использование подстановочных знаков для tar.Спасибо! –  Lekensteyn 22.02.2012, 19:12

Ни одна команда, но это работает:

$ tar -ztvf tarball.tar.gz | grep .htaccess | awk '{print $9}'>files
$ cat files
1/.htaccess
2/.htaccess
$ tar -zxvT files -f tarball.tar.gz 
x 1/.htaccess
x 2/.htaccess
4
27.01.2020, 20:21
  • 1
    Ваше решение является намного более портативным, чем мое. –  andcoz 22.02.2012, 20:03
  • 2
    Это может быть упрощено до tar tzf tarball.tar.gz | grep .htaccess > files. Прежде andcoz' ответ, я успешно использовал tar xf tarball.tar.gz -T <(tar tf tarball.gz | grep -F .htaccess). Я все еще как andcoz' отвечаю больше, потому что это короче для ввода –  Lekensteyn 22.02.2012, 20:08
  • 3
    Кроме того, не забывайте rm files при выполнении, или Вы можете быть вполне смущены через месяц или два.. ;) –  Izkata 22.02.2012, 23:03
tar tf tarball.tar.gz | grep '/\.htaccess$' | tar xfT tarball.tar.gz -
3
27.01.2020, 20:21
  • 1
    Умное использование слова для стандартного входа (-) –  Lekensteyn 23.02.2012, 00:16

Просто подробно остановившись на принятом ответе andcoz для указания на различия между gnutar и bsdtar ...

# tar (GNU tar) 1.26
# bsdtar 2.8.4 - libarchive 2.8.4
# tested in Bash shell on Mac OS X

# only list .htaccess files from archive
bsdtar -T <(echo '*/.htaccess') -tvzf archive.tar.gz
bsdtar --include='*/.htaccess' -tvzf archive.tar.gz
gnutar --wildcards '*/.htaccess' -tvzf archive.tar.gz

# only extract .htaccess files from archive
bsdtar -T <(echo '*/.htaccess') -xvzf archive.tar.gz
bsdtar --include='*/.htaccess' -xvzf archive.tar.gz
gnutar --wildcards '*/.htaccess' -xvzf archive.tar.gz
1
27.01.2020, 20:21

Используя мир, стандарт POSIX архивирует утилиту:

pax -r -s ':/\.htaccess:/.htaccess:' -s ':^\.htaccess:.htaccess:' -s ':.::'

(т.е. некорневое извлечение .htaccess файлы и корень .htaccess файлы, как; подавите все другие файлы),

0
27.01.2020, 20:21

Теги

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