быстрый вопрос о скрипте tar - PullRequest
0 голосов
/ 03 декабря 2010

Эй, Мне нужно tar все каталоги в определенном каталоге. У меня есть две проблемы, я продолжаю получать скрытые каталоги, которые мне не нужны, и мне нужно, чтобы они были размещены где-то еще, как только они будут скопированы.

Вот что я делаю сейчас:

for file in $(find /data/shares/builds/place1/ -maxdepth 1 -type d \( ! -regex '.*' \) );do tar zcf  ../Place2_$1_$timeStamp/$file.tar.gz $file;done

Я все еще получаю скрытые файлы и получаю сообщение об ошибке, что первое местоположение не существует. Я получаю сообщение:

.. / Place2_1.0.1_1012031412 // data / share / builds / Place1 / Project1.tar.gz: Не удается открыть: нет такого файла или каталога

Кто-нибудь видит что-нибудь, что я могу сделать, чтобы решить эту проблему?

1 Ответ

2 голосов
/ 04 декабря 2010

Во-первых, ваша команда поиска неверна (попробуйте протестировать ее самостоятельно).

Эта команда поиска должна предоставить вам список каталогов, которые вы хотите:

find /data/shares/builds/place1/ -mindepth 1 -maxdepth 1 -type d ! -name '.*'

(вам нужно -mindepth 1, чтобы избежать перечисления самого каталога, в котором он содержится, а! -Name работает так, как вы хотите, тогда как ваш метод регулярных выражений - нет).

Во-вторых, обратите внимание, что выходные данные find включают полные пути к каждому каталогу (например, "/ data / shares / builds / place1 / Project1", поэтому , что вся строка присваивается вашей переменной $ file и тем самым заканчивается целевое «имя файла» нового tar-файла, который вы пытаетесь создать. Это, вероятно, не то, что вы на самом деле хотите - я ожидаю, что вы пытаетесь создать новые tar-архивы, например «../Place2_1.0.1» _1012031412 / Project1.tar.gz ". В этом случае используйте basename для удаления каталогов из пути. Примерно так:

for file in $(
    find /data/shares/builds/place1/ -mindepth 1 -maxdepth 1 -type d ! -name '.*'
  ); do tar zcf  ../Place2_$1_$timeStamp/$(basename $file).tar.gz $file;done

Наконец, обратите внимание, что вам необходимо заранее создать каталог меток времени Place2_ $ 1_ $ вручную.

...