vertical una que pipes permite nombre hacer con como barra linux shell grep cp

linux - una - ¿Cómo canalizar la salida de grep a cp?



que es un pipe en linux (5)

Esto me funcionó cuando busqué archivos con una fecha específica:

ls | grep ''2018-08-22'' | xargs -I ''{}'' cp ''{}'' ~/data/lidar/tmp-ajp2/

Tengo un comando grep funcionamiento que selecciona archivos que cumplen una determinada condición. ¿Cómo puedo tomar los archivos seleccionados del comando grep y canalizarlos en un comando cp ?

Los siguientes intentos han fallado en el final de cp :

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

cp: falta el operando del archivo de destino después de ''/ home / ubuntu / data / lidar / tmp-ajp2 /'' Try ''cp --help'' para obtener más información.

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

cp: opción inválida - ''7''


Para copiar archivos a los directorios encontrados de grep, use -printf para generar directorios y -i para colocar el argumento del comando desde xarg (después de la tubería)

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

esto copia copyFile.txt a todos los directorios (en ./) que contienen "nombre de archivo"


grep -rl ''/ directory /'' -e ''pattern'' | directorio xargs cp -t /


necesitas xargs con la opción de marcador de posición :

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

Normalmente, si utiliza xargs , pondrá la salida después del comando, con el marcador de posición ( ''{}'' en este caso), puede elegir la ubicación donde se inserta, incluso varias veces.


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

Explicación:

  • Opción grep -l para generar nombres de archivos
  • xargs para convertir la lista de archivos de la entrada estándar a los argumentos de la línea de comandos
  • Opción cp -t para especificar el directorio de destino (y evitar el uso de marcadores de posición)