Я пытаюсь поместить все .js
файлы в каталоге и подкаталогах в единственный файл в лексическом порядке. Я попробовал:
grep -r --include=*.js * > dir/.filename
Что я делал неправильно?
Можно использовать find
найти файлы и затем sort
отсортировать имена:
find . -type f -name '*.js' | sort
Сохранить имена в файле:
find . -type f -name '*.js' | sort >files.txt
Давайте проанализируем Вашу команду:
grep -r --include=*.js *
Необходимо поместить имя каталога как аргумент при использовании -r
опция, например, (также помещенный ''
вокруг соответствия шарика так, чтобы они не приводили к неожиданным результатам):
grep -r --include='*.js' .
Это искало бы непустые файлы, т.е. это эквивалентно:
grep -r --include='*.js' '.' .
Если Вы хотите проверить на определенный шаблон, например, строки, запускающиеся с TERM
:
grep -r --include='*.js' '^TERM' .
Так или иначе основной момент grep
ищет содержание файла любое соответствие, но Ваша цель состоит в том, чтобы соответствовать против имен файлов, таким образом, необходимо пойти для чего-то еще, что может сделать это, например. find
или цикл оболочки.
Можно также использовать globstar
опция bash
искать файлы, заканчивающиеся в .js
рекурсивно и затем отсортируйте их использование sort
.
Сначала необходимо включить globstar
опция bash
:
shopt -s globstar
Теперь **/*.js
найдет файлы (и каталоги) с .js
расширение.
Таким образом, следующее должно добиться цели:
for i in **/*.js; do [[ -f $i ]] && echo "$i"; done
[[ -f $i ]]
есть ли, чтобы гарантировать, что мы имеем дело только с файлами на выводе.
grep
линия соответствие инструменту. Это подходит для ищущее содержание из файла, но самих не ищущих файлов.
Использование find
команда, чтобы сделать это. Находка рекурсивная по умолчанию и имеет много много возможностей для оптимизации поиска.
, Например, если я хотел рекурсивно найти все обычные файлы (не справочники) с добавочным номером *.png
рекурсивно от /home
справочник и вниз к подкаталогам, я скажу find
начинать от /home
справочник, поиск файлов с -type
, и случай-insensetive использования, соответствующий -iname
для файлов тот конец в «.png».
xieerqi:$ find /home -type f -iname "*.png" | head
/home/xieerqi/Downloads/35457542.png
/home/xieerqi/genymotion/icons/icon.png
/home/xieerqi/chinese-calendar-0.8.2/skin/default/ok.png
/home/xieerqi/chinese-calendar-0.8.2/skin/default/no.png
/home/xieerqi/chinese-calendar-0.8.2/skin/default/note.png
/home/xieerqi/chinese-calendar-0.8.2/skin/default/chinesecalendarBGyellow.png
/home/xieerqi/chinese-calendar-0.8.2/skin/blue/ok.png
/home/xieerqi/chinese-calendar-0.8.2/skin/blue/no.png
/home/xieerqi/chinese-calendar-0.8.2/skin/blue/note.png
/home/xieerqi/chinese-calendar-0.8.2/skin/blue/chinesecalendarBGblue.png