Je cherche à obtenir une liste de noms de fichiers uniquement (sans le reste du chemin) lors de l'exécution de la commande find à partir d'un terminal. Comment puis-je accomplir cela sur le mac?
13
Avec le nom de base:
find . -type f -exec basename {} \;
;
met fin à l'-exec
action. Le\
est nécessaire car a;
également une signification particulière pour le shell.Evilsoup a mentionné que ce qui a été publié ne fonctionne pas pour les noms de fichiers espacés. Vous pouvez donc utiliser à la place:
la source
Avec GNU find, vous pouvez faire:
Cela vaut probablement aussi la peine d'essayer sous OS X.
la source
-printf
est pas pris en charge sur BSD OS Xfind
.-printf
n'a que peu de rapport avec le Cprintf
ou l'utilitaire shell POSIXprintf
. L'utilisation de ce nom de fonction historique pour quelque chose de différent est très mal envisagée. Les gars BSD conservateurs le voient probablement de la même manière, donc nous ne verrons probablement pas de clone-printf
dans la découverte BSD, sous ce nom.Il existe un meilleur moyen de supprimer tout sauf la dernière partie d'un chemin de fichier; avec awk. C'est mieux car awk n'est pas exécuté une fois pour chaque fichier. Dans certains cas, cela compte.
Nous recherchons uniquement les fichiers dans ~ / tmp et nous obtenons une liste où chaque entrée est séparée par des barres obliques. Par conséquent, nous utilisons une barre oblique comme séparateur de champ (-F /) et imprimons le paramètre de champ ($ 1 .. $ 9) qui correspond au dernier champ ($ NF).
la source
MODIFIER :
En utilisant
sed
:Utilisation de la commande xargs , comme mentionné dans la réponse de @nerdwaller
la source
find . -type f -print0| xargs --null -n1 basename
--null
ou-n1
n'est disponible sur OSXEt ça:
Avantage: un seul processus supplémentaire est généré, pas un pour chaque résultat.
la source
Vous pouvez appeler
sh
depuis l'-exec
option find et éviter d'utiliser des tuyaux inutiles. Cela a également l'avantage de ne pas vous soucier des noms de fichiers amusants (espaces, nouvelles lignes, etc.):la source