Что я пытаюсь сделать?
Напишите команду, которая ищет любые файлы, которые не требуются для других файлов в моем проекте.
Что я пробовал?
Я использую, find
чтобы получить список имен файлов. Теперь я хочу использовать имена файлов в качестве строки поиска (а не файл для поиска).
Я использую, find server/lib -type f -exec basename {} \; | cut -f 1 -d '.'
чтобы получить свой список имен файлов и удаляю расширение файла.
Теперь я знаю, что это grep -R --exclude-dir=node_modules <search-string> . -l
то, к чему я хочу передать каждое имя файла, но я не знаю, как передать их в качестве <search-string>
аргумента.
Дополнительная информация
Я также смутно осознаю, что grep
передача этого может передать весь результат find
(весь список файлов), который я, очевидно, не хочу делать, если это то, что я собираюсь сделать, то скажите мне.
Кроме того (хотя это, вероятно, не входит в сферу действия этого вопроса), поскольку я использую это как способ найти любое из имен файлов, grep
для которых ничего не удается найти, любой совет по получению такого рода вывода будет принят с благодарностью
> <the-command>
filename1
server/lib/foo.js # where these are the list of files in which it appears
test/lib/foo.js
filename2
Not Found! #where `filename2` wasn't found anywhere (obviously)
источник
xargs -I {}
это то, что я искал.С
zsh
:**/
рекурсивное сглаживание. Функция, представленнаяzsh
в начале 90-х годов.(D.:t:r)
является ограничителем глобуса,zsh
специфической функцией, которая позволяет выбирать файлы, используя атрибуты, отличные от имени, или изменять сортировку или вносить изменения в найденные файлы.D
: включить точечные файлы и перемещать точечные каталоги, как еслиfind
бы Скорее всего, вы хотели бы снять это..
: только обычные файлы (как-type f
вfind
):t
,:r
: модификаторы истории, как вcsh
/,bash
но здесь применяются к файлам globbed.:t
для хвоста (базовое имя),:r
для корневого имени (расширение удалено).x${^array}
распределяет элементы какrc
'sx^$array
илиfish
' sx$array
. Например, если$array
есть (1
,2
). Это становитсяx1
x2
.${(u)array}
(дляu
nique), удалите дубликаты ((u)
являющиеся флагом расширения параметра).Для списка файлов , которые не содержат ни один из строк, заменить
-l
с-L
(при условии , GNUgrep
, но вы уже используете опции GNU-конкретных здесь).-F
предназначен для поиска по фиксированным строкам (поскольку вы, вероятно, не хотите, чтобы эти имена проектов рассматривались как регулярные выражения). Вы также можете добавить-w
опциюgrep
для совпадения слов, чтобыfoo
она не совпадала,foobar
например (foo-bar
хотя все равно будет соответствовать ).источник
projects=(server/lib/**/*(D.:t:r))
создании такого массива в zsh. Однако теперь мне нужно перечислить файлы, гдеgrep
ничего не удалось найти. Я думаю, мне нужно было бы поймать 0 / ложный код выхода?-L
в конце ответа-l
говорит мне, где был результат поиска и-L
говорит мне, где он не был найден. Но я хочу знать список поисковых терминов , которые нигде не были найдены, а не где они были / не были найдены