GNU getopt команда использует GNU getopt () библиотечная функция, чтобы сделать парсинг аргументов и опций.
Страница справочника getopt (3) состояния:
Если getopt () не распознает символ опции, он печатает сообщение об ошибке к stderr, хранит символ в
optopt
, и возвраты?
. Программа вызова может предотвратить сообщение об ошибке путем установки opterr к 0.
Поэтому ?
используется для передачи сигналов "о неизвестной опции" и не может использоваться в качестве значения опции. (Было бы невозможно сказать опцию -?
от неизвестной опции.)
Tar GNU поддерживает "-подстановочные знаки" опция.
tar tvfz file.tar.gz --wildcards '*/.htaccess'
Ни одна команда, но это работает:
$ 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
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
rm files
при выполнении, или Вы можете быть вполне смущены через месяц или два.. ;)
– Izkata
22.02.2012, 23:03
tar tf tarball.tar.gz | grep '/\.htaccess$' | tar xfT tarball.tar.gz -
Просто подробно остановившись на принятом ответе 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