1228 votos

excluir directorio del hallazgo. comando

Estoy tratando de ejecutar un comando Buscar todos los archivos javascript, pero necesito para excluir a un directorio específico. Aquí está el código de encontrar que estamos usando.

for file in $(find . -name '*.js'); do java -jar config/yuicompressor-2.4.2.jar --type js $file -o $file; done

1822voto

GetFree Puntos 4971

Todas las respuestas usando -prune están equivocados.
La forma correcta es:

find -name "*.js" -not -path "./directory/*"

981voto

f10bit Puntos 2087

Utilice el pode cambiar, por ejemplo, si desea excluir el directorio misc acaba de agregar un -path ./misc -prune -o de su comando find:

find . -path ./misc -prune -o -name '*.txt' -print

Aquí está un ejemplo con varios directorios:

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print

Aquí podemos excluir dir1, dir2 y dir3, ya que en find expresiones es una acción, que actúa sobre los criterios -path dir1 -o -path dir2 -o -path dir3 (si dir1 o dir2 o dir3), ANDed con type -d. La acción posterior, -o print, sólo tienes que imprimir.

430voto

Daniel C. Sobral Puntos 159554

Me parece que el siguiente sea más fácil razonar acerca de otras propuestas de soluciones:

find build -not \( -path build/external -prune \) -name \*.js

Esto viene de un real caso de uso, en el que tuve que llamar a yui-compresor sobre algunos de los archivos generados por wintersmith, pero dejar de lado otros archivos que necesitan ser enviados como-es.

En el interior \( y \) es una expresión que coincide exactamente build/external, y, en caso de éxito, evitar atravesar cualquier cosa por debajo. Esto es, a continuación, agrupados como una sola expresión con el escapado paréntesis, y el prefijo -not que hará find omitir nada de lo que se coincide con la expresión.

Uno se podría preguntar si la adición -not no va a hacer que todos los demás archivos ocultos por -prune a aparecer, y la respuesta es no. La forma en -prune trabaja es que nada de lo que, una vez alcanzado, los siguientes archivos de ese directorio son permanentemente ignorados.

Que también es fácil de expandir añadir exclusiones. Por ejemplo:

find build -not \( -path build/external -prune \) -not \( -path build/blog -prune \) -name \*.js

60voto

Joshua Puntos 2622

Una opción sería excluir todos los resultados que contienen el nombre del directorio con grep. Por ejemplo:

find . -name '*.js' | grep -v excludeddir

41voto

mpapis Puntos 32015

Yo prefiero el -not notación... es más legible:

find . -name '*.js' -and -not -path directory

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X