2013-08-10 12 views
5

ho la linea:Bash: Ordinare i file da 'trovare' dai contenuti

find -maxdepth 1 -type f -iname '*key*' -not -name '*~' 

Voglio estrarre il contenuto (che dovrebbe essere il testo) di tutti i file restituiti e tubo che in sort da ordinare in ordine alfabetico. Ho provato a collegare l'output della riga sopra direttamente a sort ma questo comporta l'ordinamento dei nomi dei file piuttosto che dei loro contenuti. Devo trasformare l'output di find in un array e quindi elaborarlo da sort?

[modifica] L'uscita desiderata è il contenuto ordinato.

+2

tubo attraverso 'xargs cat' poi attraverso' sort'. –

+0

Grazie! Ha funzionato perfettamente –

risposta

8

Per completezza bene qui ci sono alcuni più modi di fare che:

  1. find -maxdepth 1 -type f -iname '*key*' -not -name '*~' -exec cat {} \; | sort
  2. find -maxdepth 1 -type f -iname '*key*' -not -name '*~' | xargs cat | sort
  3. cat $(find -maxdepth 1 -type f -iname '*key*' -not -name '*~') | sort
0

Se si desidera salvare l'output ordinato in un file, provare:

find -maxdepth 1 -type f -iname '*key*' -not -name '*~' | cat | sort > sorted.txt 

altrimenti solo sbarazzarsi di > sorted.txt e l'uscita ordinato verrà stampato per la finestra del terminale.