это не может быть легко сделано с помощью find -prune
, потому что он работает с каталогами, а базовые условия поиска - над текущим файлом.
альтернативой может быть программное использование bash с использованием рекурсивной функции,в основном
rec_run() {
local file
for file in "${1:-.}"/*; do
# to filter 'file=*' when no match is found
if [[ ! -e $file ]]; then
continue
fi
# do something with file
echo "$file"
# to filter known hard links
if [[ $file = */. ]] || [[ $file = */.. ]]; then
continue
fi
# if is a directory recursive call
if [[ -d $file ]]; then
rec_run "$file";
fi
done
}
и изменение детали # do something
с помощью
if [[ -f $file/foo ]]; then
echo "$file/foo"
continue
fi
здесь foo
жестко закодировано, но может быть передано как второй аргумент функции
Примечание ${1:-.}
должен принимать первый аргумент в качестве корневого каталога или .
, если не передан