2010-12-03 2 views
0

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

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

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/shares/builds/Place1/Project1.tar.gz: Не удается открыть: Нет такого файла или каталога

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

ответ

2

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

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

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

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

Во-вторых, обратите внимание, что выход находке включает в себя полные имена каждого каталога (например, «/ данные/акции/сборки/место1/Project1» так , что вся строка получает назначение в вашей переменной $ файла и, таким образом, в конечном итоге целевое «имя файла» нового tar-файла, который вы пытаетесь создать. Вероятно, это не то, что вы на самом деле хотите - я ожидаю, что вы пытаетесь создать новые tarballs, например, «../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_ $ каталог временной метки вручную, заранее.

+0

Спасибо за очень тщательный ответ. Я новичок в unix, поэтому я очень благодарен за удивительное объяснение. Извините за задержку в принятии вашего ответа. – PFranchise 2010-12-06 04:07:41