Mac Terminal "trova" comando: cosa significa una doppia barra nell'output del risultato?

9

Uso il comando find per la ricerca in strutture di directory grandi e annidate.

Nell'output dei risultati a volte è inclusa una doppia barra (//).

Esempio (dopo "Download"):

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

Per prima cosa ho pensato che avrebbe segnato l'attuale directory di lavoro. Ma non è questo il caso.

Qual è il significato di questa doppia barra?

Di solito copio il risultato negli appunti, cambio nel mirino. Poi "shift" + "command" + "g" e incollando il percorso (fino al file) nella casella. In modo che la directory contenente sia aperta.

Funziona bene. Ma la doppia barra che devo rimuovere manualmente.

Pertanto: Come posso evitarlo?

    
posta mizech 14.08.2016 - 09:00
fonte

2 risposte

17

find è piuttosto letterale. Quando gli dici di cercare in "~ / Downloads /", usa quello (inclusa la barra finale) come prefisso per qualunque cosa trovi. Dato che c'è una barra non necessaria e irrilevante alla fine del percorso che hai dato, si finisce con una barra extra inutile e irrilevante nell'output.

Soluzione: rimuovi il "/" finale dalla directory di ricerca:

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf
#> find ~/Downloads -iregex ".*some.*"
/Users/michael/Downloads/subDirectory/some_file.pdf
    
risposta data 14.08.2016 - 09:11
fonte
4

What's the meaning of this double-slash?

Significa che stai usando una strana vecchia ricerca BSD.

How can I avoid it?

In effetti puoi omettere la barra finale nel tuo comando originale, ma dal momento che viene aggiunta automaticamente tramite il completamento del tab (che dovresti sicuramente fare il maggior uso possibile), & dal momento che la barra finale viene effettivamente utilizzata in una miriade di luoghi altrove per essere sicuri di avere a che fare con una directory e non con un nome file, omettendo che sia controintuitiva e amp; sciocco.

Invece, suggerisco di fare una di queste altre cose:

a) Crea un wrapper per scoprire che pipe to sed: | sed 's @ // @ / @'

b) Installa i findutils di GNU con 'brew install findutils' e poi usa 'gfind' direttamente, alias 'trova' a 'gfind', o aggiungi / usr / local / opt / findutils / libexec / gnubin al tuo percorso ( che aggiunge anche GNU findutils 'locate', 'updatedb', & 'xargs').

c) Passa a un sistema operativo GNU / Linux appropriato che non avrebbe avuto questo problema (e altri mille) in primo luogo. : P

    
risposta data 23.09.2016 - 20:35
fonte

Leggi altre domande sui tag