Кто-то упомянул на stackoverflow в trees
страница справочника, что это то, почему -P
переключатель не исключает вещи, которые не соответствуют шаблону.
BUGS
Tree does not prune "empty" directories when the -P and -I options are
used. Tree prints directories as it comes to them, so cannot accumu‐
late information on files and directories beneath the directory it is
printing.
Таким образом, это, кажется, не возможно получить tree
отфильтровать его вывод с помощью переключателя-P.
РЕДАКТИРОВАНИЕ № 1
От вопроса я отправил на том, Так, чтобы был закрыт. Кто-то, @fhauri, разместил следующую информацию как альтернативные способы выполнить то, что я пытался сделать с tree
команда. Я добавляю их к своему ответу здесь для полноты.
-d
переключатель просит не печатать файлы:
-d List directories only.
Таким образом, если Вы ХОТИТЕ, используют это, Вы могли:
tree tstdir -P '*qm*' -L 1 | grep -B1 -- '-- .*qm'
|-- id1
| `-- aqm_P1800-id1.0200.bin
--
|-- id165
| `-- aqm_P1800-id165.0200.bin
|-- id166
| `-- aqm_P1800-id166.0200.bin
--
|-- id17
| `-- aqm_P1800-id17.0200.bin
--
|-- id18
| `-- aqm_P1800-id18.0200.bin
--
|-- id2
| `-- aqm_P1800-id2.0200.bin
Вообще, если Вы используете -L 1
,
-L level
Max display depth of the directory tree.
Вы могли лучше использовать (в ударе) этот синтаксис:
cd tstdir
echo */*qm*
или
printf "%s\n" */*qm*
и если только dir необходим:
printf "%s\n" */*qm* | sed 's|/.*$||' | uniq
Вообще Вы могли сделать это очень быстро если чистый удар:
declare -A array;for file in */*qm* ;do array[${file%/*}]='';done;echo "${!array[@]}"
Это могло быть объяснено:
cd tstdir
declare -A array # Declare associative array, (named ``array'')
for file in */*qm* ;do # For each *qm* in a subdirectory from there
array[${file%/*}]='' # Set a entry in array named as directory, containing nothing
done
echo "${!array[@]}" # print each entrys in array.
... если бы нет никакого шаблона соответствия файла, результат отобразился бы *
. таким образом для идеального задание, там оставленное сделать:
resultList=("${!array[@]}")
[ -d "$resultList" ] || unset $resultList
(Это было бы намного более быстро, чем
declare -A array
for file in */*qm*; do
[ "$file" == "*/*qm*" ] || array[${file%/*}]=''
done
echo "${!array[@]}"
)
.bashrc
- это сценарий оболочки , который Bash запускается всякий раз, когда он запускается в интерактивном режиме. Он инициализирует интерактивный сеанс оболочки. Вы можете поместить в этот файл любую команду, которую вы можете ввести в командной строке.
Здесь вы помещаете команды для настройки оболочки для использования в вашей конкретной среде или для настройки вещей в соответствии с вашими предпочтениями. Обычно в .bashrc
помещают псевдонимы , которые должны быть всегда доступны.
.bashrc
запускается каждый запуск интерактивной оболочки. Если вы скажете:
$ bash ; bash ; bash
, а затем трижды нажмете Ctrl-D , .bashrc
запустится три раза. Но если вы вместо этого скажете:
$ bash -c exit ; bash -c exit ; bash -c exit
, тогда .bashrc
не будет запускаться вообще, поскольку -c
делает вызов Bash не интерактивным. То же самое верно и при запуске сценария оболочки из файла.
Контраст .bash_profile
и .profile
, которые запускаются только при запуске новой оболочки входа в систему. ( bash -l
) Вы выбираете, будет ли команда идти в .bashrc
vs .bash_profile
в зависимости от того, хотите ли вы, чтобы он запускался один раз или при каждом запуске интерактивной оболочки.
В качестве контрпримера к псевдонимам, которые я предпочитаю помещать в .bashrc
, вы хотите внести изменения в PATH
в .bash_profile
, поскольку эти изменения обычно не являются идемпотентными :
export PATH="$PATH:/some/addition"
Если вместо этого вы поместите это в .bashrc
, каждый раз, когда вы запускаете интерактивную под-оболочку, : / some / add
снова будет прикреплен к концу PATH
, создавая дополнительную работу для оболочки, если вы ошибетесь при вводе команды.
Вы получаете новую интерактивную оболочку Bash всякий раз, когда выполняете оболочку из vi
, например, с помощью : sh
.
Это все, что вы действительно знаете, чтобы начать
Вот "overkill" версия, полезная для опытных разработчиков:
:helptags ~/.vim/doc
Опытный разработчик часто будет иметь намного больше.[1124298].
С моим можно ознакомиться здесь [1124299](pic с подсветкой синтаксиса)[1124300]:
Объяснение:
-1. Настройте мой файл истории так, чтобы он игнорировал дубликаты и был намного больше, чем по умолчанию.[1124301]:-1. -2. Опция цвета для [1124302]ls[1124303] в зависимости от того, используете ли вы linux или OSX[1124304]. -3. Функция "[1124305]md[1124306]" для создания и cd в каталог одной командой[1124307]. -4. Найдите текущую ветку git'а, если в git-репо и...[1124308]. -5. -9. Определите удивительную подсказку PS1, как в
-10. Улучшенная подсказка PS2[1124311]. -11. Установите vi в качестве редактора в командной строке[1124312]. -12. Установите vi в качестве редактора по умолчанию[1124313]. -13. выполните мой [1124314].bash_aliases[1124315] файл, если он существует[1124316]. -14. Выполните мой git вкладки завершения скрипта (для пультов и ветвей), если он существует.[1124317]. -15. Выполните автопереход, если он существует[1124318]. -16. Разрешить cd'ing без набора части cd, если версия bash >= 4[1124319]. -17. Выполнить скрипт завершения баша, если он существует[1124320]. -18. Используйте TMUX, если он присутствует[1124321]. -19. Добавьте rvm к моему PATH[1124322]. -20. Используйте rvm, если он существует.
Это также упрощает использование всего файла непосредственно на новой машине без проблем, которые влияют на открытие нового терминального окна.
REMINDER - если вы меняете свой .bashrc, обязательно запустите новое терминальное окно, чтобы убедиться, что оно работает ДО перезагрузки (лучшая практика - сделайте это сразу после изменения). Если вы когда-нибудь испортите свой .bashrc и перезагрузитесь, вы НЕ МОЖЕТЕ БЫТЬ ОТКАЗАНЫВАТЬСЯ В ВХОД! Лично я также создаю второго пользователя 'admin' на персональных машинах, чтобы в такой экстренной ситуации (сломанный логин) я мог войти в систему и затем использовать sudo для исправления моего другого файла входа в .bashrc.[1123887]. Это конфигурационный файл bash
.
Интерактивные (не входящие в систему) оболочки, затем конфигурация считывается из этих файлов:
$ HOME / .bashrc
Для оболочки входа конфигурация считывается из следующих файлов:
/ etc / profile
(Источник всегда) $ HOME / .bash_profile
(остальные файлы проверяются по порядку, пока не будет найден один, а затем другие не будут прочитаны) $ HOME / .bash_login
$ HOME / .profile
Простая иллюстрация того, как / когда они загружаются, представлена на изображении ниже.
Я добавил echo
в мои .bashrc
и .bash_profile
, см. man bash
для получения дополнительной информации