Comando "encontrar" de la Terminal de Mac: ¿Qué significa una barra doble en la salida del resultado?

9

Uso el comando find para buscar en estructuras de directorios anidadas y grandes.

En el resultado-salida a veces se incluye una barra doble (//).

Ejemplo (después de "Descargas"):

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

Primero pensé que marcaría el directorio de trabajo actual. Pero ese no es el caso.

¿Cuál es el significado de este doble corte?

Por lo general, copio el resultado en el portapapeles, cambio al buscador. Luego "shift" + "comando" + "g" y pegando la ruta (hasta el archivo) en el cuadro. Para que se abra el directorio que lo contiene.

Funciona bien. Pero la doble barra tengo que eliminarla manualmente.

Por lo tanto: ¿Cómo puedo evitarlo?

mizech
fuente
2
Tenga en cuenta que no tiene que eliminar la barra doble. Una barra doble solo es especial al comienzo de una ruta, y solo si son exactamente dos barras. Varias barras diagonales en el medio o al final o cualquier número de barras que exactamente dos al principio son exactamente equivalentes a una barra. Eso está garantizado por la especificación POSIX / SUS.
Jörg W Mittag

Respuestas:

17

findes bastante literal Cuando le dice que busque dentro de "~ / Downloads /", lo usa (incluida la barra diagonal final) como prefijo para lo que encuentre. Como hay una barra oblicua innecesaria e irrelevante al final del camino que le diste, terminas con una barra extra innecesaria e irrelevante en la salida.

Solución: elimine el "/" final del directorio de búsqueda:

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

¿Cuál es el significado de este doble corte?

Significa que está utilizando un extraño hallazgo antiguo de BSD.

¿Cómo puedo evitarlo?

De hecho, puede omitir la barra diagonal final en su comando original, pero dado que se agrega automáticamente a través de la finalización de la pestaña (que definitivamente debe hacer el mayor uso posible), y dado que la barra diagonal final se usa en muchos lugares para asegurarse de que se trata de un directorio y no de un nombre de archivo, omitirlo es contradictorio y tonto.

En cambio, sugiero hacer una de estas otras cosas:

a) Haga una envoltura para encontrar que las tuberías sed: | sed 's @ // @ / @'

b) Instale findutils de GNU con 'brew install findutils' y luego use 'gfind' directamente, alias 'find' a 'gfind', o agregue / usr / local / opt / findutils / libexec / gnubin a su ruta (que también agrega GNU findutils '' localizar ',' updatedb 'y' xargs ').

c) Cambie a un sistema operativo GNU / Linux adecuado que no hubiera tenido este problema (y otros miles) en primer lugar. :pags

Jan Kyu Peblik
fuente
1
Solo agrégalo set mark-directories offa tu. inputrcy estás listo para ir De uno de esos viejos tipos de BSD.
fd0
@ fd0, entonces uno no podría distinguir entre directorios y archivos con el mismo nombre; es el hallazgo de BSD lo que es un poco desagradable aquí, no golpea ni lee
Jan Kyu Peblik el