PATH
.Существует встроенное для этого. Два, даже: type
и command
. POSIX путь:
command -v emacs # machine-readable format
type emacs # human-only format
В ударе можно также использовать type -p emacs
видеть просто путь внешней команды.
Однако здесь, which
является на самом деле правильным. Bash хранит информацию о местоположении команды в памяти, так, чтобы это могло выполнить команду быстрее в следующий раз. Вы установили новое emacs
исполняемый файл на Вашем PATH
, но удар все еще имеет старое расположение в своем кэше. Выполненный hash emacs
искать emacs
снова, или hash -r
освободить кэш.
Я нахожусь на Fedora, и эти voicepacks находятся в немного отличающемся месте:
$ 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|^$"
Используя 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
Эта команда работает путем создания списка полных путей в файлы, которые являются точно 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
управляйте передают каждые 2 уровня глубокий каталог basename
команда. Нотация basename {}
то, что делает эти преобразования базового имени. Найдите вызовы им через, он -exec
переключатель.
Самое легкое
ls -d /usr/share/festival/voices/*/*
Это расширено оболочкой во все подкаталоги /usr/share/festival/voices/
и затем к содержанию каждого из тех подкаталогов.
Если Вы только хотите убывать к определенному уровню, как Ваш заголовок предполагает с некоторыми реализациями find
как GNU и некоторый BSD's:
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.
-type f
кому: -type d
должен решить это, правильно? Будет также ожидать на ответе slm относительно цели -exec basename {}
– user66001
02.10.2013, 22:04
-type d
найдет каталоги. basename
очень хорошая идея, она распечатает только имя и удалит путь. Принятие Вас только хочет имена, это - то, что необходимо сделать. Взгляните на man basename
и также man dirname
.
– terdon♦
02.10.2013, 22:08
TLDR; для тех, кто только что пришел сюда на основании заголовка этого вопроса; для «Список подкаталогов только на уровне n [s] в глубину» :используйте
find -maxdepth N
где N
— любое число.
Пример:
find -maxdepth 4
для 4-уровневого списка всех файлов и папок.
А если вам нужно найти определенный файл или папку, просто направьте его на grep
. Бывший:
find -maxdepth 4 | grep -i some_file_name
Обратите внимание, что -i
выше делает поиск grep имен файлов и папок, вытекающих из команды find
, регистр 'i'нечувствительный.
-exec basename {}
Вы могли объяснить здесь? – user66001 02.10.2013, 22:03find ~/ -maxdepth 1 -mindepth 1 -type d | xargs du -csh | sort -h
Находит самые большие каталоги отсортированными на размере – oligofren 25.04.2018, 11:23