Команда для записи всех .js файлов в единственный файл?

Я пытаюсь поместить все .js файлы в каталоге и подкаталогах в единственный файл в лексическом порядке. Я попробовал:

grep -r --include=*.js * > dir/.filename 

Что я делал неправильно?

2
задан 19 October 2015 в 01:22

2 ответа

Можно использовать 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 ]] есть ли, чтобы гарантировать, что мы имеем дело только с файлами на выводе.

3
ответ дан 2 December 2019 в 02:55

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
0
ответ дан 2 December 2019 в 02:55

Другие вопросы по тегам:

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