Considérez quelques systèmes * nix courants (par exemple Debian, CentOS, Arch et Kali).
Jai toujours utilisé find
; Je ne me souviens pas avoir utilisé GNU find, mais à partir de un exemple , jai « vu que je supposais que la syntaxe de GNU find pourrait être plus simple (bien que pourrait autoriser moins dopérations).
Jai deux questions:
-
Est-ce que
find
lutilitaire par défaut « rechercher ou utiliser » dans les systèmes courants ou les systèmes seront-ils livrés avec les deuxfind
etGNU find
? -
Était
GNU find
destiné à être plus simple àfind
?
Commentaires
Réponse
Les utilitaires GNU implémentent souvent le standard POSIX, puis létendent également avec des fonctionnalités supplémentaires pour plus de commodité (et, en contrepartie, la portabilité diminuée entre les Unices). Laspect de portabilité est la raison pour laquelle vous verrez parfois des réponses ou des commentaires sur ce site qui sont très prudents pour indiquer quand un utilitaire GNU ou une autre implémentation spécifique dun utilitaire est supposé.
Si vous êtes sous Linux système, vous utiliseriez très probablement l’implémentation GNU de find
, et vous n’auriez probablement pas d’autre find
installé. Sur les systèmes non Linux, vous auriez un find
natif et la possibilité dinstaller également GNU find
(qui serait le plus souvent installé sous le name gfind
ou, moins souvent, gnufind
).
Comme avec la plupart des utilitaires GNU, GNU find
implémente et étend la find
spécification standard. Ce n’est donc pas « plus simple » mais plutôt plus complexe pour être plus pratique, et il serait un peu plus facile d’effectuer certaines tâches complexes avec lui qu’avec un find
strictement conforme aux normes .
Les implémentations étendues de find
implémentent souvent, par exemple, les -maxdepth
et -mindepth
prédicats que le standard ne mentionne pas, et GNU find
en particulier a également -printf
pour imprimer les chemins trouvés en utilisant une variété de possibilités de formatage (le standard find
na pas de -printf
), et des prédicats pour faire des correspondances dexpressions régulières de différents types sur les chemins ainsi quun certain nombre dautres prédicats non standard, dont certains se trouvent également dans dautres implémentations de find
(éventuellement avec une sémantique très légèrement différente, comme -execdir
whi ch fonctionne légèrement différemment selon ce que find
est utilisé 1 ).
Le -delete
, utilisé dans la réponse à laquelle vous créez un lien, nest pas standard, mais implémenté par GNU find
ainsi que dans find
sur certains autres systèmes non Linux. GNU find
« s -delete
se plaindra si vous lutilisez pour supprimer un répertoire non vide, mais loption correspondante avec par exemple OpenBSD » s find
ne le fera pas (ni ne supprimera le répertoire non vide).
La plupart des systèmes Linux, quelle que soit la distribution, utilisent le même ensemble doutils coreutils et findutils (variantes comme busybox existe, évidemment). Pour utiliser un ensemble dimplémentations doutils complètement différent, vous devez passer à lun des systèmes BSD open source ou à macOS, Solaris, AIX ou un autre Unix commercial.
1 GNU find
ajoute ./
aux noms de chemin lorsque vous utilisez -execdir
pendant certaines autres implémentations ne « t.
Commentaires
- Et
-print0
, et-direxec
, et-delete
, et … ;-). Les options de séparateur nul disponibles dans les outils GNU sont particulièrement pratiques. - @StephenKitt Mais rarement nécessaire 🙂
- à droite, sauf lors de lécriture de réponses non POSIX ici ;-). (Ou des scripts qui doivent fonctionner nimporte où .)
- Le principal problème avec la documentation GNU est quelle essaie de laisser les gens utiliser des alias non standard pour les méthodes POSIX et ainsi provoquer le scripts associés pour créer un verrouillage du fournisseur.
- @StephenKitt
-print0
est également disponible sur * bsd et solaris; mais sur solarisxargs -0
ne ' t fonctionne, doncgxargs -0
(de/usr/bin/sfw
) doit être utilisé à la place.
Réponse
À quoi les gens se réfèrent souvent car Linux est mieux appelé GNU / Linux: Linux plus GNU. Par conséquent, les outils que vous utilisez sont probablement GNU.
- Linux: un noyau, il est utilisé dans GNU / Linux, Android et de nombreux autres systèmes.
- GNU: an système dexploitation, souvent utilisé avec le noyau Linux, mais peut également être utilisé avec BSD, Hurd, Cygwin (une DLL pour Microsoft Windows, elle fait semblant dêtre un noyau), WSL (Windows Subsystem for Linux: GNU without Linux, on Microsoft Windows), HPUX, Solaris, Dec Athena et bien dautres.
Par conséquent, vous utilisez probablement GNU find.
GNU est un projet à écrire, une version gratuite (gratuite comme dans la liberté, pas comme dans le prix) de, tout Unix, y compris des outils tels que find
, le projet GNU ne se soucie pas de la conformité POSIX: il se conformera là où cela a du sens, mais apportera également des améliorations.
De plus, vous supposez quil ny a quun seul autre find
est faux.
find
sur busybox ou android 😉 Sur les systèmes non Linux, GNU find est généralement nommégfind
.find --version
😉find
sur ces systèmes soit GNUfind
.