13 votes

Commande "find" du terminal Mac : Que signifie une double barre oblique dans le résultat ?

J'utilise la commande find pour effectuer des recherches dans des structures de répertoires vastes et imbriquées.

Le résultat est parfois accompagné d'une double barre oblique ( // ).

Exemple (après "Téléchargements") :

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf

J'ai d'abord pensé qu'il marquerait le répertoire de travail actuel. Mais ce n'est pas le cas.

Quelle est la signification de cette double barre ?

En général, je copie le résultat dans le presse-papiers, puis je passe au finder. Puis "shift" + "command" + "g" et coller le chemin (jusqu'au fichier) dans la boîte. De sorte que le répertoire contenant est ouvert.

Cela fonctionne bien. Mais je dois supprimer manuellement la double barre oblique.

Par conséquent : Comment puis-je l'éviter ?

3 votes

Notez que vous n'êtes pas obligé de supprimer la double barre oblique. Une double barre oblique n'est spéciale qu'à l'emplacement débutant d'un chemin, et seulement si c'est exactement deux des barres obliques. Des barres obliques multiples dans le champ milieu ou à la fin ou tout autre nombre de barres obliques que deux au début sont exactement équivalentes à une barre oblique. C'est garanti par la spécification POSIX/SUS.

19voto

Gordon Davisson Points 30215

find est plutôt littérale. Lorsque vous lui demandez de chercher dans "~/Downloads/", il l'utilise (y compris la barre oblique de fin) comme préfixe pour tout ce qu'il trouve. Puisqu'il y a un slash inutile et non pertinent à la fin du chemin que vous lui avez donné, vous vous retrouvez avec un slash supplémentaire inutile et non pertinent dans la sortie.

Solution : supprimez le "/" qui suit dans le répertoire de recherche :

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf
#> find ~/Downloads -iregex ".*some.*"
/Users/michael/Downloads/subDirectory/some_file.pdf

4voto

Jan Kyu Peblik Points 163

Quelle est la signification de cette double barre ?

Cela signifie que vous utilisez un vieux logiciel BSD étrange.

Comment puis-je l'éviter ?

Vous pouvez en effet omettre la barre oblique de fin dans votre commande originale, mais étant donné qu'elle est ajoutée automatiquement par la complétion de tabulation (que vous devriez absolument utiliser autant que possible), et étant donné que la barre oblique de fin est en fait utilisée dans une myriade d'autres endroits pour s'assurer que vous avez affaire à un répertoire et non à un nom de fichier, l'omettre est contre-intuitif et stupide.

A la place, je suggère de faire une de ces autres choses :

a) Faire un wrapper pour find qui pipe vers sed : | sed 's@//@/@/@'

b) Installez GNU findutils avec 'brew install findutils' et ensuite utilisez directement 'gfind', alias 'find' à 'gfind', ou ajoutez /usr/local/opt/findutils/libexec/gnubin à votre chemin (qui ajoute aussi GNU findutils 'locate', 'updatedb', & 'xargs').

c) Passer à un système d'exploitation GNU/Linux approprié qui n'aurait pas eu ce problème (et un millier d'autres) en premier lieu. :p

1 votes

Il suffit d'ajouter set mark-directories off à votre . inputrc et tu es prêt à partir. De la part d'un de ces vieux gars BSD.

0 votes

@fd0 alors on ne pourrait pas faire la distinction entre les répertoires et les fichiers avec le même nom ; c'est le find de BSD qui est un peu crufty ici, pas bash ou readline.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X