Я пытаюсь запустить эту команду
for c in ax
do
mkdir $TgtDir$c/$Date
cd $TgtDir$c/$DirNew
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo $DIR
echo find . -iname $tgt -exec cp --parents {} ../$Date \;
find . -iname $tgt -exec cp --parents {} ../$Date \;
done
, она печатает
/home/ax/new
find . -iname '*20170829*' -exec cp --parents {} ../20170829 ;
, но ничего не копирует. Если я запускаю команду, которая здесь повторяется (после добавления \ в конце кажется, что эхо проглатывает это как побег) из нового каталога, она работает нормально - и файлы копируются в / home / ax / 20170829 / ....
Есть идеи, что мне здесь не хватает?
Я полагаю, что на самом деле вы находитесь не в каталоге DIR; вы выполняете cd
в подоболочке, но рабочий каталог для остальных команд остается $TgtDir$c/$DirNew
. Вы можете проверить это, вызвав pwd
после echo $DIR
.
Решение: вызовите cd
напрямую, не используйте подоболочку и не присваивайте результат переменной. Добавьте абсолютный целевой путь в команду копирования.
for c in ax
do
mkdir $TgtDir$c/$Date
DIR=$( dirname "${BASH_SOURCE[0]}" )
cd "${DIR}"
pwd
find . -iname $tgt -exec cp --parents {} $TgtDir$c/$Date \;
done
Альтернатива: Используйте исходный каталог вместо "." в команде поиска.
for c in ax
do
mkdir $TgtDir$c/$Date
cd $TgtDir$c/$DirNew
DIR=$( dirname "${BASH_SOURCE[0]}" )
find "${DIR}" -iname $tgt -exec cp --parents {} ../$Date \;
done
Примечание. Код не тестировался.