Список подкаталогов только n уровень глубокий

Фестиваль хранит данные голосовой почты в следующей примерной структуре каталогов:

/usr/share/festival/voices/<language>/<voicepack name>

Каков самый простой однострочный (желательно с использованием ls ), чтобы распечатывать только имя <voicepack name> во всех потенциально многочисленных подкаталогах <language> ?

  • Как создать структурированный список всех файлов и каталогов в определенном каталоге (рекурсивно)?
  • Почему Linux может показать имя файла, содержащее символ '/'?
  • Есть ли команда для перечисления файлов, исключение подкаталогов и отображение размера и даты?
  • pipe ls to grep (строки против «элементов»)
  • Сравните файлы, которые находятся в каталоге 1, но не в каталоге 2?
  • Как сделать ls с подстановочным знаком и посмотреть имя каталога
  • «Ls» в выводах каталога «Нет такого файла или каталога» для некоторых файлов
  • Результат echo * и echo. *
  • 2 Solutions collect form web for “Список подкаталогов только n уровень глубокий”

    Я нахожусь на Fedora, и эти голосовые пакеты находятся в несколько другом месте:

     $ ls /usr/share/festival/lib/voices/*/ -1 | grep -vE "/usr|^$" kal_diphone ked_diphone nitech_us_awb_arctic_hts nitech_us_bdl_arctic_hts nitech_us_clb_arctic_hts nitech_us_jmk_arctic_hts nitech_us_rms_arctic_hts nitech_us_slt_arctic_hts 

    Вы можете просто изменить это так:

     $ ls /usr/share/festival/voices/*/ -1 | grep -vE "/usr|^$" 

    Использование find

    Использование ls в этой усадьбе обычно неодобрительно, потому что вывод ls трудно разобрать. Лучше использовать команду find , например:

     $ find /usr/share/festival/lib/voices -maxdepth 2 -mindepth 2 \ -type d -exec basename {} \; nitech_us_awb_arctic_hts nitech_us_bdl_arctic_hts nitech_us_slt_arctic_hts nitech_us_jmk_arctic_hts nitech_us_clb_arctic_hts nitech_us_rms_arctic_hts ked_diphone kal_diphone 

    Подробная информация о поиске и basename

    Эта команда работает, создавая список полных путей к файлам, которые имеют ровно 2 уровня по отношению к этому каталогу:

     /usr/share/festival/lib/voices 

    Этот список выглядит следующим образом:

     $ find /usr/share/festival/lib/voices -maxdepth 2 -mindepth 2 /usr/share/festival/lib/voices/us/nitech_us_awb_arctic_hts /usr/share/festival/lib/voices/us/nitech_us_bdl_arctic_hts /usr/share/festival/lib/voices/us/nitech_us_slt_arctic_hts /usr/share/festival/lib/voices/us/nitech_us_jmk_arctic_hts /usr/share/festival/lib/voices/us/nitech_us_clb_arctic_hts /usr/share/festival/lib/voices/us/nitech_us_rms_arctic_hts /usr/share/festival/lib/voices/english/ked_diphone /usr/share/festival/lib/voices/english/kal_diphon 

    Но нам нужна последняя часть этих каталогов, листового узла. Поэтому мы можем использовать basename для его анализа:

     $ basename /usr/share/festival/lib/voices/us/nitech_us_awb_arctic_hts nitech_us_awb_arctic_hts 

    Соединяя все это вместе, мы можем заставить команду find передать каждый двухуровневый каталог в команду basename . Обозначение basename {} – это то, что делает эти преобразования в базовом имени. Найти вызовы через его -exec переключатель.

    Самый простой

     ls -d /usr/share/festival/voices/*/* 

    Это расширяется оболочкой во все подкаталоги /usr/share/festival/voices/ а затем в содержимое каждого из этих подкаталогов.

    Если вы хотите только спуститься до определенного уровня, как предполагает ваш заголовок, с некоторыми вариантами find такими как GNU и некоторые BSD:

     find /usr/share/festival/voices/ -mindepth 2 -maxdepth 3 -type d 

    Это найдет все каталоги ( -type d ), которые находятся в подкаталоге /usr/share/festival/voices/ из-за mindepth 2 но не глубже, чем 3 уровня вниз ( maxdepth 3 ). От man find :

      -maxdepth levels Descend at most levels (a non-negative integer) levels of direc‐ tories below the command line arguments. -maxdepth 0 means only apply the tests and actions to the command line arguments. -mindepth levels Do not apply any tests or actions at levels less than levels (a non-negative integer). -mindepth 1 means process all files except the command line arguments. 
    Interesting Posts

    Выполнять скрипт пользователя как root в приложениях запуска

    Игрок или плагин, который может транслировать аудио в субтитры в реальном времени

    Файл журнала 29GB на Монетный двор Linux на разделе 38 ГБ

    Как отправить всю информацию в файл / var / adm / message в удаленную систему?

    Извлеките метки времени и найдите разницу

    Что предоставляет / etc / exports и как мне это узнать?

    Режим GNU Emacs Prolog

    Фильтровать пакет UDP в tc-фильтре

    Настройка браузера Chromium для загрузки нескольких плагинов из файла / etc / chromium-browser / default

    Как автозапуск приложения в Gnome при установке тома?

    Прозрачный прокси TOR – как работает переадресация TCP

    Создание резервной копии базы данных cron (дамп) без раскрытия пароля в / etc / crontab

    Как конвертировать, изменять размер и центрировать изображение с помощью ImageMagick

    разрешение pure-ftpd запрещено на внешнем USB-накопителе

    Каков надежный способ автоматизации загрузки FTP «новейшего файла в каталоге X»?

    Linux и Unix - лучшая ОС в мире.