Commande "find" du terminal Mac: que signifie une double barre oblique dans la sortie du résultat?


9

J'utilise la commande find pour rechercher dans des structures de répertoires volumineuses et imbriquées.

Dans le résultat, la sortie contient parfois 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é que cela marquerait le répertoire de travail actuel. Mais ce n'est pas le cas.

Quelle est la signification de cette double barre oblique?

Habituellement, je copie le résultat dans le presse-papiers, passe au Finder. Puis "shift" + "command" + "g" et collez le chemin (jusqu'au fichier) dans la boite. Pour que le répertoire contenant soit ouvert.

Fonctionne bien. Mais la double barre oblique que je dois supprimer manuellement.

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


2
Notez que vous n'avez pas à supprimer la double barre oblique. Une double barre oblique n'est spéciale qu'au début d'un chemin, et seulement si c'est exactement deux barres obliques. Plusieurs barres obliques au milieu ou à la fin ou un nombre de barres obliques supérieur à deux au début équivalent exactement à une barre oblique. Cela est garanti par la spécification POSIX / SUS.
Jörg W Mittag

Réponses:


17

findest plutôt littéral. Lorsque vous lui demandez de rechercher dans "~ / Téléchargements /", il utilise cela (y compris la barre oblique de fin) comme préfixe pour tout ce qu'il trouve. Puisqu'il y a une barre oblique inutile et non pertinente à la fin du chemin que vous lui avez donné, vous vous retrouvez avec une barre oblique supplémentaire inutile et non pertinente dans la sortie.

Solution: supprimez le "/" de fin du 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

4

Quelle est la signification de cette double barre oblique?

Signifie que vous utilisez une ancienne découverte BSD étrange.

Comment puis-je l'éviter?

Vous pouvez en effet omettre la barre oblique de fin dans votre commande d'origine, mais comme elle est ajoutée automatiquement via la complétion de tabulation (que vous devriez certainement utiliser le plus possible), et puisque la barre oblique de fin est en fait utilisée dans une myriade d'endroits ailleurs pour être sûr que vous avons affaire à un répertoire et non à un nom de fichier, l'omettre est contre-intuitif et idiot.

Au lieu de cela, je suggère de faire l'une de ces autres choses:

a) Faire un wrapper pour trouver que les tuyaux à séduire: | sed 's @ // @ / @'

b) Installez GNU findutils avec 'brew install findutils' puis utilisez directement 'gfind', alias 'find' à 'gfind', ou ajoutez / usr / local / opt / findutils / libexec / gnubin à votre chemin (qui ajoute également GNU findutils '' Locate '', 'Updatedb', & 'Xargs').

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


1
Ajoutez simplement set mark-directories offà votre. inputrcet vous êtes prêt à partir. De l'un de ces vieux gars BSD.
fd0

@ fd0 alors on ne pourrait pas distinguer les répertoires et les fichiers du même nom; c'est la découverte de BSD qui est un peu cruelle ici, pas bash ou readline
Jan Kyu Peblik
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.