trova -maxdepth 0 non restituendomi alcun output


17

Sto cercando di capire come usare l' find -maxdepth 0opzione.

Ho la seguente struttura di directory.

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

Ora eseguo il mio findcomando come di seguito.

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

Con nessuno dei findcomandi precedenti , viene restituito file1 .

Dalla pagina man di find, vedo le informazioni di seguito.

-maxdepth 0 significa applicare solo i test e le azioni agli argomenti della riga di comando.

Ho cercato alcuni esempi con l' -maxdepth 0opzione e non sono riuscito a trovare alcun esempio corretto.

La mia findversione è,

find --version
find (GNU findutils) 4.4.2

Qualcuno può fornirmi alcuni suggerimenti su quale -maxdepth 0opzione casi sarebbe utile?

MODIFICARE

Quando eseguo il comando seguente, ottengo che il file1 venga elencato due volte. Questo è destinato a funzionare in questo modo?

find . file1 -maxdepth 1 -name "file1"
./file1
file1

Risposte:


24

Supponiamo di avere file1nella directory corrente. Poi:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

Ora diamo un'occhiata a ciò che afferma la documentazione:

-maxdepth 0 significa applicare solo i test e le azioni agli argomenti della riga di comando.

Nel mio primo esempio sopra, solo la directory .è elencata sulla riga di comando. Poiché .non ha il nome file1, nulla è elencato nell'output. Nel mio secondo esempio sopra, entrambi .e file1sono elencati nella riga di comando e, poiché file1corrisponde -name "file1", è stato restituito nell'output

In altre parole, -maxdepth 0significa non cercare directory o sottodirectory. Cerca invece solo un file corrispondente tra quelli elencati esplicitamente nella riga di comando.

Nei tuoi esempi, solo le directory sono state elencate nella riga di comando e nessuna di esse è stata nominata file1. Quindi, nessun output.

In generale, molti file e directory possono essere nominati dalla riga di comando. Ad esempio, qui proviamo un findcomando con 11 file e directory sulla riga di comando:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

Percorsi sovrapposti

Ritenere:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

Apparentemente, come sottolinea Ramesh, findseguirà ogni percorso specificato nella riga di comando e cercherà corrispondenze anche se i percorsi conducono allo stesso file, come in . fileo anche se i percorsi sono duplicati esatti, come in file1 file1.


Grazie. Ma come potrei passare alcuni nomi di file sulla riga di comando?
— Ramesh,

Buon punto. Vedi la mia risposta aggiornata. Puoi metterne quanti ne vuoi prima del primo test. Ad esempio: find * -maxdepth 0 -name "file1". Il *elencherà tutti i file nella directory corrente sulla riga di comando.
— Giovanni 1024

1
@Ramesh Risposta aggiornata di nuovo con, spero, spiegazione ed esempi migliori.
— Giovanni 1024

grazie ancora. Ho aggiornato la mia domanda con maggiori dettagli dal tuo ultimo aggiornamento.
— Ramesh,

@Ramesh Non riesco a trovarlo documentato ma vedo lo stesso comportamento che fai: findosserva ogni percorso sulla riga di comando e riporta le corrispondenze su ognuno anche se sono duplicati.
— Giovanni 1024
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.