untar каталог *.tgz файлов с помощью подстановочного знака

Если можно управлять им, я нахожу, что лучший способ иметь дело с материалом как это состоит в том, чтобы использовать VPN. Тем путем единственной вещью, для которой они могут предназначаться, является VPN. Не должно быть никаких сервисов, открытых для мира в целом, кроме тех, которые необходимы, чтобы "все" получили доступ, такие как Ваш веб-сервер. Все остальное должно быть заблокировано брандмауэром. Теперь единственной вещью, которую действительно необходимо взволновать по поводу обеспечения, является VPN. Если Вы можете, получить статический IP для компьютеров, Вы управляете своими серверами от и блокируете Вашу VPN вниз к тому определенному IP-адресу. Это - действительно единственный способ мешать людям пробовать к "в лоб" пароли.

3
16.02.2011, 21:47
3 ответа

Вы могли всегда делать:

ls *.tgz | grep -v Broad_hapmap3_r2_Affy6_cels_excluded.tgz | xargs -n1 tar zxvf

Но я подозреваю, что кто-то отправит более чистый путь, действительно делают это непосредственно от оболочки удара, не нуждаясь в grep там.

0
27.01.2020, 21:10
  • 1
    В целом Вы не хотите анализировать вывод ls если это возможно. –  Steven D 16.02.2011, 21:11
  • 2
    @Steven: Извините, не следуйте. Можно ли уточнить? –  Faheem Mitha 16.02.2011, 21:20
  • 3
    Когда Вы анализируете вывод ls можно столкнуться с большим количеством проблем при обнаружении с именами файлов со специальными символами. Посмотрите следующее для лучшего объяснения: mywiki.wooledge.org/ParsingLs –  Steven D 16.02.2011, 21:27
  • 4
    @Steven: Спасибо за ссылку. Статья, на которую ссылаются, упоминает новые строки, но теперь, когда я думаю об этом в мире Windows, например, они любят имена файлов с пробелами в них и пытаются экспортировать его в другое место, и это отдельно испортило бы остроту здесь, я думаю. Что Вы предпочли бы как альтернатива? найти? –  Faheem Mitha 16.02.2011, 21:32
  • 5
    я использовал бы find для определенных сложных случаев и ответа glenn jackman в самых легких случаях. Я не был бы удивлен, была ли некоторая волшебная оболочка globbing колдовство, возможное с ZSH или Bash 4. –  Steven D 16.02.2011, 21:41

В zsh:

setopt extended_glob
for z in *.tgz~Broad_hapmap3_r2_Affy6_cels_excluded.tgz; do tar xzf $z; done

Другая возможность в zsh:

setopt extended_glob
zargs -n 1 -- *.tgz~Broad_hapmap3_r2_Affy6_cels_excluded.tgz -- tar xzf

В ksh (но не удар или zsh, поскольку они не поддерживают и шаблоны):

for z in @(*.tgz&!(Broad_hapmap3_r2_Affy6_cels_excluded.tgz); do tar xzf "$z"; done

Иначе в ksh:

( FIGNORE=Broad_hapmap3_r2_Affy6_cels_excluded.tgz;
  for z in *.tgz; do tar xzf "$z"; done )

В ударе:

( GLOB_IGNORE=Broad_hapmap3_r2_Affy6_cels_excluded.tgz;
  for z in *.tgz; do tar xzf "$z"; done )

В любой оболочке:

for z in *.tgz; do
  [ "$z" = Broad_hapmap3_r2_Affy6_cels_excluded.tgz ] || tar xzf "$z"
done

Еще один hackish путь:

mv Broad_hapmap3_r2_Affy6_cels_excluded.tgz Broad_hapmap3_r2_Affy6_cels_excluded.tgz.not
for z in *.tgz; do tar xzf "$z"; done
mv Broad_hapmap3_r2_Affy6_cels_excluded.tgz.not Broad_hapmap3_r2_Affy6_cels_excluded.tgz

Если Вы также хотите действовать на файлы в подкаталогах, находка является естественным инструментом для превращения к. Рекурсивные примеры ниже исключают названные файлы Broad_hapmap3_r2_Affy6_cels_excluded.tgz в любом подкаталоге.

find . -name '*.tgz' -type f \
       \! -name Broad_hapmap3_r2_Affy6_cels_excluded.tgz \
       -exec tar xzf {} \;

Для рекурсивного обхода в zsh или ударе ≥4, можно использовать ** в шаблонах. В zsh:

setopt extended_glob
zargs -n 1 -- **/*.tgz~**/Broad_hapmap3_r2_Affy6_cels_excluded.tgz -- tar xzf

В ударе ≥4:

shopt -s globstar
( GLOB_IGNORE=Broad_hapmap3_r2_Affy6_cels_excluded.tgz;
  for z in **/*.tgz; do tar xzf "$z"; done )

Можно даже использовать, находят, не хотите ли Вы рекурсивный обход, хотя это не наиболее удобный способ затем.

find *.tgz  -type f \
            \! -name Broad_hapmap3_r2_Affy6_cels_excluded.tgz \
            -exec tar xzf {} \;
8
27.01.2020, 21:10
  • 1
    я думаю, что Вы, возможно, инвертировали порядок имен файлов в Вашем последнем примере. Это, или я пропускаю что-то очевидное. –  Steven D 16.02.2011, 21:52
  • 2
    @Gilles: Спасибо, это - настоящее множество подходов! Но Вы забыли включать использование подхода, находят. :-) –  Faheem Mitha 16.02.2011, 21:58
  • 3
    @Steven: фиксированный. @Faheem:готово. –  Gilles 'SO- stop being evil' 16.02.2011, 22:11
  • 4
    @Gilles: к вашему сведению при помещении двух @user в тот же комментарий только первое уведомляется. Посмотрите объект 7 в meta.stackoverflow.com/questions/43019 / … –  Faheem Mitha 16.02.2011, 23:29
  • 5
    @Faheem: я считал это. Я рассчитывал на то, что вы были уведомленными относительно своего редактирования. –  Gilles 'SO- stop being evil' 16.02.2011, 23:46

Для одноразовых вещей как это я был бы просто "в лоб" это:

for f in *.tgz; do 
   [[ "$f" != "Broad_hapmap3_r2_Affy6_cels_excluded.tgz" ]] && tar zxvf "$f"
done
2
27.01.2020, 21:10

Теги

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