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)