Я заметил, что find -execdir не переносится, поэтому я решил найти переносимый способ использовать только find -exec для достижения такого же эффекта. Для этого нужно иметь возможность определить, содержит ли путь к каталогу из '/', найденного в 'find', какие-либо символические ссылки и отказываться от него, если это произойдет. Я написал небольшой скрипт, чтобы определить, содержит ли данный путь символические ссылки, но он всегда возвращает код 1, независимо от того, что я ему даю. Никакая команда, которая печатает что-либо, не срабатывает, за исключением случаев, когда я даю ей не-каталог, и в этом случае срабатывает первая команда printf.Почему этот скрипт не работает?
#!/bin/sh -e
# If any commands fail, the script should return a nonzero status
[ -d "$1" ] || printf "%s is not a directory" "$1" && exit 1 # Tests if argument is a directory
cd "$1" || echo "Could not change directory" && exit 1 # If it is a directory, goes to it
until [ "$PWD" = '/' ] # Loop until root directory reached
do
cd .. || echo "Could not change directory" && exit 1 # Go to parent directory
[ -d "$PWD" ] || printf "%s is not directory" "$PWD" && exit 1 # Check that this is a directory
done
echo "Given an okay directory"
exit 0
Там не должно быть необходимости проверять, если каталог существует несколько раз –