GNU/Linux >> Linux Esercitazione >  >> Linux

Comando di ricerca di Linux:mostra l'avanzamento

Soluzione 1:

con questo trucco puoi vedere la cartella corrente - ma nessuna barra di avanzamento - scusa.

 watch readlink -f /proc/$(pidof find)/cwd

Soluzione 2:

Una piccola utility chiamata pv (visualizzatore pipe) può aiuto. Dal fantastico riassunto di Peteris Krumins:

Pipe viewer è uno strumento basato su terminale per monitorare l'avanzamento dei dati attraverso una pipeline.

Puoi usare pv in diversi modi. Quando gioco qui, lo metto subito dopo una pipe per monitorare l'avanzamento dell'output generato da find (dovrebbe passare stdin a stdout intatto)

find / -mtime -1h | pv > /dev/null

che mostrerà un output simile a questo:

6.42MB 0:01:25 [31.7kB/s] [         <=>      ]

(Ho reindirizzato stdout a /dev/null in modo da poter vedere la barra di avanzamento in azione senza che l'output voli. Questo probabilmente non è il tuo intento con find, quindi adattalo di conseguenza)

Onestamente non sono sicuro di quanto funzioni bene in natura. Per reperti "costosi" come quello sopra (attraversando dalla radice), sembrava funzionare abbastanza bene. Per i comandi più semplici in un nodo più profondo nell'albero delle directory, pv ha fallito miseramente. Questi comandi restituiscono risultati immediatamente, quindi una barra di avanzamento è probabilmente discutibile qui.

In ogni caso, gioca e vedi se funziona per quello che ti serve. Spunti di riflessione, almeno.

Soluzione 3:

L'ho cercato oggi e sono arrivato qui tramite Google. Ho avuto una ricerca di lunga data in esecuzione su OS X e apparentemente, watch lì non esiste. Quindi ecco un'altra soluzione:

lsof -Fn -a -c find -d cwd +r 10

  • lsof =elenco dei file aperti
  • -Fn =mostra solo il nome del file/directory (preceduto dal carattere 'n', saltalo se preferisci il lsof completo uscita
  • -a =dillo a lsof per mostrare solo le righe corrispondenti a tutti criteri (per impostazione predefinita mostra le righe corrispondenti a qualsiasi criteri)
  • -c find =mostra i file/directory aperti dal processo chiamato find (in realtà, processo il cui nome inizia con find , ma fa distinzione tra maiuscole e minuscole, quindi Finder non verrà visualizzato)
  • -d cwd =mostra righe con FD (filedescriptor) cwd (directory di lavoro corrente)
  • +r 10 =mostra l'output ogni 10 secondi finché non vengono trovati file aperti (la ricerca è terminata)

Questo mostrerà la directory find sta elaborando ogni 10 secondi, quindi dovrebbe dare un'idea se find funziona ancora e fino a che punto è progredito.

Soluzione 4:

C'è un esempio di ricerche parallele con find in man find . Usandolo, puoi eseguire più controlli per ogni oggetto, eseguendo più azioni a seconda di quale condizione funziona. Il primo controllo può essere, ad esempio, semplice-print , quindi tutti i nomi vengono stampati su stdout. Il secondo assegno farà quello che vuoi. Qualcosa come:

find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)

Se il secondo controllo dovesse visualizzare anche i nomi dei file, puoi reindirizzare uno di essi a stderr usando -fprint /dev/stderr .

Soluzione 5:

AFAIK, non è così, e implementarlo non sarebbe banale.

... Hmm. Forse uno script che esegue find <target dir> -type d prima, memorizzando l'elenco e quindi echeggiando ogni directory prima di eseguire un find <list item> -maxdepth 1 <rest of find parameters> in un ciclo for.

Tieni presente che stai scambiando una /significativa/ perdita di prestazioni in cambio della possibilità di vedere vagamente cosa sta facendo.


Linux
  1. 25 semplici esempi di comando trova Linux

  2. Comando Linux mv

  3. comando IP Linux

  4. comando cd di Linux

  5. Che cos'è un comando per trovare la priorità del processo in Linux?

Comando Linux Finger per trovare i dettagli dell'utente

Comando Df in Linux

Come trovare l'indirizzo IP nella riga di comando di Linux

Trova comando in Linux/UNIX

Il comando Trova Directory di Linux:spiegato

Linux top -c per mostrare il comando completo