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.