Sto cercando di capire come utilizzare lopzione find -maxdepth 0.

Ho la seguente struttura di directory.

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

Ora eseguo il mio comando find come di seguito.

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

Senza nessuno dei find comandi precedenti, file1 viene restituito.

Dalla pagina man di find, vedo le informazioni seguenti.

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

Ho cercato alcuni esempi con lopzione -maxdepth 0 e “non sono riuscito a trovare alcun esempio corretto.

Il mio find la versione è,

find --version find (GNU findutils) 4.4.2 

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

EDIT

Quando eseguo il comando seguente, ottengo il file1 elencato due volte. È previsto che funzioni in questo modo?

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

Risposta

Supponiamo di avere file1 nella directory corrente. Quindi :

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

Ora, vediamo cosa dice la documentazione:

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

Nel mio primo esempio sopra, solo la directory . è elencato nella riga di comando. Poiché . non ha il nome file1, nelloutput non è elencato nulla. Nel secondo esempio sopra, sia . e file1 sono elencati nella riga di comando e, perché file1 corrisponde a -name "file1", è stato restituito nelloutput

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

Nei tuoi esempi, solo le directory erano elencate sulla riga di comando e nessuna di esse era denominata file1. Quindi, nessun output.

In generale, molti file e directory possono essere nominati sulla riga di comando. Ad esempio, qui proviamo un comando find 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 

Sovrapposizione percorsi

Considera:

$ 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 fa notare Ramesh, find seguirà ogni percorso specificato sulla riga di comando e cerca corrispondenze anche se i percorsi portano allo stesso file, come in . file o anche se i percorsi sono duplicati esatti, come in file1 file1.

Commenti

  • grazie. Ma come potrei passare alcuni nomi di file sulla riga di comando?
  • Buon punto. Vedi la mia risposta aggiornata. Puoi metterne quante ne vuoi prima del primo test. Ad esempio: find * -maxdepth 0 -name "file1". * elencherà tutti i file nella directory corrente sulla riga di comando.
  • @Ramesh Answer aggiornato di nuovo con, spero, spiegazioni ed esempi migliori.
  • grazie ancora. Ho aggiornato la mia domanda con maggiori dettagli dal tuo ultimo aggiornamento.
  • @Ramesh Non riesco a trovarla documentata ma vedo lo stesso comportamento che fai tu: find guarda ciascuna percorso sulla riga di comando e riporta le corrispondenze su ciascuna di esse anche se sono duplicati.

Rispondi

Se tu desidera trovare file (non directory) in modo non ricorsivo allinterno di una directory usa:

 find . -maxdepth 1 -type f -name "file1" # ./file1  

-maxdepth 0 non cercherà . Cercherà solo di trovare una corrispondenza tra i nomi di file / directory che hai fornito come argomenti in find. Per esempio. nellistruzione precedente, utilizzando un valore 0, cercherebbe di abbinare file1 a . che non corrisponde. Passando * invece di . bash sostituirebbe * con lelenco dei file nella directory corrente che restituirebbe una corrispondenza.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *