¿Qué estoy tratando de hacer?
Escribir un comando que busque cualquier archivo que no sea requerido por ningún otro archivo en mi proyecto.
Que he probado
Estoy usando find
para obtener una lista de nombres de archivo. Ahora quiero usar los nombres de archivo como la cadena de búsqueda (en lugar del archivo para buscar).
Estoy usando find server/lib -type f -exec basename {} \; | cut -f 1 -d '.'
para obtener mi lista de nombres de archivo y eliminar la extensión del archivo.
Ahora sé que esto grep -R --exclude-dir=node_modules <search-string> . -l
es a lo que quiero canalizar cada nombre de archivo, pero no sé cómo pasarlos como <search-string>
argumento.
Otra información
También soy vagamente consciente de que canalizar esto grep
podría pasar el resultado completo de find
(la lista completa de archivos) que obviamente no quiero hacer si eso es lo que estoy a punto de hacer, entonces dígame.
Además, (aunque esto probablemente no esté en el alcance de esta pregunta), ya que estoy usando esto como una forma de encontrar cualquiera de los nombres de archivo que grep
no pueden encontrar nada, cualquier consejo sobre cómo obtener este tipo de salida sería muy apreciado
> <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)
fuente
xargs -I {}
es lo que estaba buscando.Con
zsh
:**/
engrosamiento recursivo. Una característica introducida porzsh
a principios de los 90.(D.:t:r)
es un calificador global, unazsh
característica específica que permite seleccionar archivos utilizando atributos distintos al nombre, o cambiar la clasificación o hacer modificaciones en los archivos encontrados.D
: incluye archivos de puntos y directorios de puntos de recorrido como lofind
haría. Lo más probable es que quieras quitártelo..
: solo archivos normales (como-type f
enfind
):t
,:r
: modificadores del historial como encsh
/bash
pero aquí se aplican a los archivos globales.:t
para la cola (nombre base),:r
para el nombre raíz (extensión eliminada).x${^array}
distribuye los elementos como lo haríanrc
'sx^$array
ofish
' sx$array
. Por ejemplo si$array
es (1
,2
). Eso se conviertex1
x2
.${(u)array}
(parau
nique), elimine los duplicados ((u)
siendo un indicador de expansión de parámetros).Para la lista de archivos que no contienen ninguna de las cadenas, reemplace
-l
con-L
(suponiendo GNUgrep
, pero ya está usando opciones específicas de GNU aquí).-F
es para la búsqueda de cadenas fijas (ya que probablemente no desee que esos nombres de proyecto se traten como expresiones regulares). También es posible que desee agregar una-w
opcióngrep
para la coincidencia de palabras para quefoo
,foobar
por ejemplo , no coincida (foo-bar
aunque sí lo haría ).fuente
projects=(server/lib/**/*(D.:t:r))
producir una matriz como esa en zsh. Sin embargo, ahora necesito enumerar los archivos dondegrep
no se pudo encontrar nada. ¿Supongo que necesitaría atrapar un código de salida 0 / falso?-L
al final de la respuesta-l
me dice dónde estaba el resultado de la búsqueda y-L
dónde no se encontró. Pero quiero saber una lista de los términos de búsqueda que no se encontraron en ningún lugar en lugar de donde se encontraron / no se encontraron