Considere algunos sistemas * nix comunes (digamos Debian, CentOS, Arch y Kali).
Siempre usó find
; No recuerdo haber usado GNU find, pero de un ejemplo , he visto que asumí que la sintaxis de GNU find podría ser más simple (aunque podría permitir menos operaciones).
Tengo dos preguntas:
-
¿Es
find
la utilidad predeterminada «buscar o-y operar» en sistemas comunes o los sistemas vendrán con ambosfind
yGNU find
? -
Was
GNU find
destinado a para ser más simple quefind
?
Comentarios
Respuesta
Las utilidades GNU a menudo implementan el estándar POSIX y luego lo amplían con funcionalidad adicional para mayor conveniencia (y, como otra cara de la moneda, una menor portabilidad en Unices). El aspecto de la portabilidad es la razón por la que en algún momento verá respuestas o comentarios en este sitio que son muy cuidadosos para señalar cuando se asume una utilidad GNU o alguna otra implementación específica de una utilidad.
Si está en Linux sistema, muy probablemente estaría usando la implementación GNU de find
, y probablemente no tendría otro find
instalado. En sistemas que no sean Linux, tendría un find
nativo y la posibilidad de instalar también GNU find
(que se instalaría con mayor frecuencia bajo el name gfind
o, con menos frecuencia, gnufind
).
Como con la mayoría de las utilidades GNU, GNU find
implementa y extiende la find
especificación estándar. Por lo tanto, no es «más simple» sino posiblemente más complejo para que sea más conveniente, y sería algo más fácil hacer ciertas tareas complejas con él que con un find
estrictamente estándar. .
Las implementaciones extendidas de find
a menudo, por ejemplo, implementan -maxdepth
y -mindepth
predicados que el estándar no menciona, y GNU find
en particular también tiene -printf
para imprimir los nombres de ruta encontrados usando una variedad de posibilidades de formato (el find
estándar no tiene -printf
) y predicados para hacer coincidencias de expresiones regulares de varios tipos en nombres de ruta, así como otros predicados no estándar, algunos de los cuales también se encuentran en otras implementaciones de find
(posiblemente con semánticas ligeramente diferentes, como -execdir
whi ch funciona ligeramente diferente dependiendo de qué find
se esté usando 1 ).
El -delete
, que se utiliza en la respuesta a la que se vincula, no es estándar, pero está implementado por GNU find
y en find
en algunos otros sistemas que no son Linux. GNU find
«s -delete
se quejará si lo usa para eliminar un directorio no vacío, pero la opción correspondiente con, por ejemplo, OpenBSD» s find
no lo hará (tampoco eliminará el directorio no vacío).
La mayoría de los sistemas Linux, independientemente de la distribución, usan el mismo conjunto de herramientas coreutils y findutils (variantes como busybox existe, obviamente). Para utilizar un conjunto de implementaciones de herramientas completamente diferente, tendría que pasar a uno de los sistemas BSD de código abierto oa macOS, Solaris, AIX o algún otro Unix comercial.
1 GNU find
antepone ./
a los nombres de ruta cuando se usa -execdir
while algunas otras implementaciones no «t.
Comentarios
- Y
-print0
, y-direxec
, y-delete
, y … ;-). Las opciones de separador nulo disponibles en las herramientas GNU son particularmente convenientes. - @StephenKitt Pero rara vez es necesario 🙂
- correcto, excepto cuando escribe aquí respuestas que no son POSIX ;-). (O scripts que necesitan funcionar en cualquier lugar .)
- El principal problema con la documentación GNU es que intenta permitir que las personas usen alias no estándar para los métodos POSIX y así provocar scripts relacionados para crear un bloqueo de proveedor.
- @StephenKitt
-print0
también está disponible en * bsd y solaris; pero en solarisxargs -0
no funciona ' t, por lo quegxargs -0
(de/usr/bin/sfw
) debe usarse en su lugar.
Responder
Lo que la gente suele referir ya que Linux se conoce mejor como GNU / Linux: Linux más GNU. Por lo tanto, las herramientas que está utilizando probablemente sean GNU.
- Linux: un kernel, se usa en GNU / Linux, Android y muchos otros sistemas.
- GNU: un sistema operativo, a menudo usado con el kernel de Linux, pero también se puede usar con BSD, Hurd, Cygwin (una DLL para Windows de Microsoft, pretende ser un kernel), WSL (Subsistema de Windows para Linux: GNU sin Linux, en Microsoft Windows), HPUX, Solaris, Dec Athena y muchos otros.
Por lo tanto, probablemente esté utilizando GNU find.
GNU es un proyecto para volver a escribir, una versión gratuita (gratuita como en libertad, no como en precio) de todo Unix, incluidas herramientas como find
, el proyecto GNU no se preocupa por el cumplimiento de POSIX: cumplirá donde tenga sentido, pero también hará mejoras.
También asume que solo hay otro find
es incorrecto.
find
en busybox o android 😉 En sistemas que no son Linux, GNU find generalmente se llamagfind
.find --version
😉find
en esos sistemas sea GNUfind
.