Во-первых, ваша команда поиска неверна (попробуйте протестировать ее самостоятельно).
Эта команда поиска должна предоставить вам список каталогов, которые вы хотите:
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_ $ вручную.