Найти папки в каталоге, не указав родительский каталог
Не удалось указать содержимое папки, в которой я не включен, в то время как исключение собственно имени папки.
Пример:
[email protected] [~]# find ~/test -type d
/root/test
/root/test/test1
Однако я хочу, чтобы он отображал /test 1 в качестве примера.
Мысли?
Ответы
Ответ 1
Вы можете сделать это с помощью -exec
и basename
:
find ~/test -type d -exec basename {} \;
Объяснение:
- Часть
find ~/test -type d
находит все каталоги рекурсивно под ~/test
, как вы уже знаете.
- Часть
-exec basename {} \;
запускает команду basename
на {}
, где все результаты последнего шага заменяются на.
Ответ 2
Нет ничего плохого в простой
find ~/test -mindepth 1
Аналогично, это будет иметь тот же эффект:
find ~/test/*
поскольку он соответствует всем содержащимся внутри ~/test/
, но не ~/test
.
В любом случае вы почти наверняка обнаружите, что find
будет жаловаться на параметр -mindepth n
, который будет после любых других переключателей, поскольку упорядочение обычно важно, но переключатели -(min|max)depth n
влияют на общее поведение.
Ответ 3
Тогда вам нужно -type f
вместо -type d
.
Или, если вы хотите отобразить список папок, исключая родительский -mindepth 1
(find ~/test -type d -mindepth 1
).
И теперь, когда вы его отредактировали, я думаю, что вы хотите
find ~/test -type d -mindepth 1 |cut -d/ -f3-
Но я думаю, вам нужно быть более конкретным; -)
Ответ 4
Я просто установил его с помощью sed
find $BASE -type d \( ! -iname "." \)|sed s/$BASE//g
Где $BASE
- начальное имя папки.