Ваша первая команда выдаст странные результаты, если путь содержит пробелы.
Используйте небольшой сценарий оболочки:
find -L -- . -mindepth 2 -maxdepth 2 -type d -exec sh -c 'basename "$(dirname "{}")"' \;
Альтернативный синтаксис для передачи одного аргумента пути в сценарий:
find -L -- . -mindepth 2 -maxdepth 2 -type d -exec sh -c 'basename "$(dirname "$1")"' sh {} \;
Или передать в сценарий столько аргументов, сколько возможно:
find -L -- . -mindepth 2 -maxdepth 2 -type d -exec sh -c '
for path do
basename "$(dirname "$path")"
done
' sh {} +
С помощью утилит GNU можно выводить строки с NUL-окончанием, при этом dirname
передается xargs -0
. Команда basename
не запускается, если нет аргументов (-r
):
find -L -- . -mindepth 2 -maxdepth 2 -type d -exec dirname -z {} + | xargs -r0 basename -a