bash найти родителей exec cp в сценарии

Я пытаюсь запустить эту команду

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 / ....

Есть идеи, что мне здесь не хватает?

0
29.08.2017, 10:29
1 ответ

Я полагаю, что на самом деле вы находитесь не в каталоге 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

Примечание. Код не тестировался.

1
28.01.2020, 02:45

Теги

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