Найти список каталогов на один уровень ниже соответствующего каталога

Попробуйте python -V в терминале и посмотрите, есть ли предустановленная версия. Если нет, используйте один из методов, описанных здесь. Однако я предлагаю рассмотреть возможность использования не Chrome OS, а другого дистрибутива Linux. И не только из-за этой проблемы с Python. Вы можете попробовать Ubuntu, если вы новичок, или Debian. Посмотрите на некоторые известные и широко поддерживаемые дистрибутивы. Вы тоже найдете Python предустановленным ;)

11
08.03.2017, 03:17
7 ответов

Просто добавьте -prune , чтобы найденные каталоги не попадали в:

find . -type d -path '*/wp-content/plugins/*' -prune -print

Вы должны процитировать этот * wp-content / plugins / * , поскольку он также является оболочка glob.

Если вам нужны только имена каталогов, а не их полный путь, с помощью GNU find вы можете заменить -print на -printf '% f \ n ' или предполагая, что пути к файлам не содержат символов новой строки, направьте вывод вышеприведенной команды в awk -F /' {print $ NF} ' или sed' s |. * / || ' (также предполагается, что пути к файлам содержат только допустимые символы).

С zsh :

printf '%s\n' **/wp-content/plugins/*(D/:t)

** / - это любой уровень подкаталогов (функция, появившаяся в zsh в начале 90-х, и теперь найденная в большинстве других оболочек, например ksh93 , tcsh , fish , bash , yash , хотя обычно в некоторых вариантах), ( /) , чтобы выбрать только файлы типа , каталог , D , чтобы включить скрытые (точки), : t , чтобы получить хвост (название файла).

16
27.01.2020, 19:57

Команда tree предназначена именно для этой цели. Глубину можно контролировать с помощью флага -L . Вот пример местного сайта Wordpress, который я поддерживаю:

$ tree -L 1 wp-content/
wp-content/
├── index.php
├── plugins
└── themes

2 directories, 1 file

$ tree -L 2 wp-content/
wp-content/
├── index.php
├── plugins
│   ├── akismet
│   ├── contact-form-7
│   ├── index.php
│   └── wordpress-seo
└── themes
    ├── index.php
    ├── twentyfifteen
    └── twentysixteen

11 directories, 3 files

$ tree -L 1 wp-content/plugins/
wp-content/plugins/
├── akismet
├── contact-form-7
├── index.php
└── wordpress-seo

5 directories, 1 file
3
27.01.2020, 19:57

Вы могли бы find recurse, что-то вроде:

find / -type d -path *wp-content/plugins -exec find {} -maxdepth 1 -mindepth 1 -type d \;
6
27.01.2020, 19:57

Bash-ically:

shopt -s globstar
printf "%s\n" **/wp-content/plugins/*

prints:

bat/bar/foo/blog/wp-content/plugins/GHI
baz/wp-content/plugins/ABC
baz/wp-content/plugins/DEF
foo/bar/wp-content/plugins/XYZ

or

shopt -s globstar
for d in **/wp-content/plugins/*; do printf "%s\n" ${d##*/}; done

prints:

GHI
ABC
DEF
XYZ
4
27.01.2020, 19:57

Основываясь на ответе DopeGhoti, как насчет цикла сопоставления:

find / -type d -iregex '.*/wp-content/plugins' -print0 | while read -r -d $'\0' D; do
    find "$D" -maxdepth 2 -mindepth 1
done

Причина этого заключается в том, что вы можете найти его запутанным / громоздким с несколькими -exec , при этом избегая проблем со специфическими именами файлов, содержащими \ n '' и т. Д. -Print0 будет использовать нулевые разделители между результатами.

1
27.01.2020, 19:57

Основываясь на том, что вы начали:

find -type d -path *wp-content/plugins/* | egrep -o "wp-content/plugins/[^/]+($|/)" | sed -r "s~wp-content/plugins/([^/]+)($|/)~\1~" | uniq  

egrep захватывает * wp-content / plugins / * и любые символы до следующей косой черты / или конца строки $, включая желаемую часть.

sed с разделителем ~ выбирает нужную часть, используя первый набор круглых скобок (), и использует \ 1 (то, что вы хотите) в качестве замены всего

uniq отфильтровывает дубликаты results

0
27.01.2020, 19:57

Для Bash: Simple (работает для файлов / каталогов с пробелами и новыми строками ):

shopt -s globstar                    # allow ** for several dirs.
a=(**/wp-content/plugins/*/)         # capture only wanted dirs.
a=("${a[@]%/}")                      # remove trailing slash (dirs) `/`.
printf '%s\n' "${a[@]##*/}"          # print only the last dir name.

Wll print:

GHI
ABC
DEF
XYZ

Даже если есть файлы.

3
27.01.2020, 19:57

Теги

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