Comando "trova" Terminale Mac: cosa significa una doppia barra nell'output del risultato?


9

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

Nel risultato di output è talvolta 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 è così.

Qual è il significato di questa doppia barra?

Di solito copio il risultato negli appunti, cambio nel cercatore. Quindi "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?


2
Si noti che non è necessario rimuovere la doppia barra. Una doppia barra è speciale solo all'inizio di un percorso e solo se si tratta esattamente di due barre. Più barre nel mezzo o alla fine o un numero qualsiasi di barre esattamente due all'inizio sono esattamente equivalenti a una barra. Questo è garantito dalle specifiche POSIX / SUS.
Jörg W Mittag,

Risposte:


17

findè piuttosto letterale. Quando gli dici di cercare in "~ / Download /", lo usa (inclusa la barra finale) come prefisso per qualunque cosa trovi. Dal momento che c'è una barra non necessaria e irrilevante alla fine del percorso che hai indicato, finisci con una barra aggiuntiva non necessaria e irrilevante nell'output.

Soluzione: rimuovere 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

4

Qual è il significato di questa doppia barra?

Significa che stai usando la strana vecchia ricerca di BSD.

Come posso evitarlo?

Puoi effettivamente omettere la barra finale nel tuo comando originale, ma poiché viene aggiunto automaticamente tramite il completamento della scheda (che dovresti sicuramente fare il maggior uso possibile), e poiché la barra finale viene effettivamente utilizzata in una miriade di posti altrove per essere sicuro hai a che fare con una directory e non con un nome di file, ometterlo è controintuitivo e sciocco.

Invece, suggerisco di fare una di queste altre cose:

a) Crea un involucro per trovare i tubi per sed: | sed 's @ // @ / @'

b) Installa i findutils di GNU con 'brew install findutils' e quindi usa direttamente 'gfind', alias 'find' per 'gfind', oppure aggiungi / usr / local / opt / findutils / libexec / gnubin al tuo percorso (che aggiunge anche GNU findutils '' individuare ',' updatedb 'e' xargs ').

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


1
Aggiungi set mark-directories offal tuo. inputrce sei a posto. Da uno di quei vecchi ragazzi di BSD.
f0,

@ fd0 allora non si sarebbe in grado di distinguere tra dir e file con lo stesso nome; è la scoperta di BSD che è un po 'croccante qui, non bash o readline
Jan Kyu Peblik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.