2015-10-15 14 views
10

Ho un comando di lavoro grep che seleziona i file che soddisfano una determinata condizione. Come posso prelevare i file selezionati dal comando grep e inserirli in un comando cp?Come convogliare l'output da grep a cp?

i seguenti tentativi non sono riusciti alla fine cp:

grep -r "TWL" --exclude=*.csv* | cp ~/data/lidar/tmp-ajp2/ 

cp: manca destinazione del file operando dopo '/ home/ubuntu/dati/lidar/tmp-ajp2 /' Prova 'cp - -aiuto 'per ulteriori informazioni .


cp `grep -r "TWL" --exclude=*.csv*` ~/data/lidar/tmp-ajp2/ 

cp: opzione non valida - '7'

+0

Possibile duplicato di [eseguire un'operazione per \ * ogni \ * elemento elencato da grep] (http://stackoverflow.com/questions/9682721/perform-an-operation-for-each- item-listed-by-grep) – tripleee

+1

'| xargs cp -t dir' – tripleee

risposta

17
grep -l -r "TWL" --exclude=*.csv* | xargs cp -t ~/data/lidar/tmp-ajp2/ 

Spiegazione:

  • grep -l opzione per i nomi di file di output solo
  • xargs per convertire lista dei file da standard input a riga di argomenti di comando
  • CP -t opzione per specificare la directory di destinazione (ed evitare l'uso di segnaposto)
+0

L'opzione '-l' non funziona per me. A parte questo, funziona bene. – marcelocra

+0

'-t' si dice un'opzione illegale per' cp' su macOS sierra. – MeadowMuffins

10

è necessario xargs con l'opzione segnaposto:

grep -r "TWL" --exclude=*.csv* | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/ 

normalmente se si utilizza xargs, si metterà l'output dopo il il comando, con il segnaposto ('{}' in questo caso), è possibile scegliere la posizione in cui è inserito, anche più volte.

+1

In Solaris funziona bene. –

0

T o copiare i file a grep directory trovati, utilizzare -printf alle directory di output e -i per posizionare l'argomento del comando da xarg (dopo pipe)

find ./ -name 'filename.*' -print '%h\n' | xargs -i cp copyFile.txt {} 

questa copie copyFile.txt a tutte le directory (in ./) contenente " nome file "

0

grep -rl '/ directory /' -e 'modello' | xargs cp -t/directory

+0

Ti piacerebbe approfondire questo? – mrun