GNU/Linux >> Tutoriales Linux >  >> Linux

Canalización de `find` a 'tail`

Lo siguiente debería funcionar absolutamente en cualquier ruta.

Declarar una función para poder usar head y tail en salida separada por NUL:

nul_terminated() {
    tr '\0\n' '\n\0' | "[email protected]" | tr '\0\n' '\n\0'
}

Luego puede usarlo para obtener una lista de rutas separadas por NUL de su búsqueda después de pasar por tail :

find . -exec printf '%s\0' {} \; | nul_terminated tail -n 2

Luego puede canalizar eso a xargs y agrega tus opciones:

find . -iname "*FooBar*" -exec printf '%s\0' {} \; | nul_terminated tail -n 2 | xargs -I "{}" -0 cp "{}" "dest"

Explicación:

  1. find archivos en el directorio actual (. ) e inferiores con un nombre que contenga foobar (no distingue entre mayúsculas y minúsculas debido al i en -iname );
  2. para cada archivo, ejecute (-exec ) un comando para
  3. imprime la ruta de cada archivo ({} ) seguido de un carácter NUL (\0 ) individualmente (\; );
  4. intercambiar líneas nuevas y caracteres NUL (tr '\0\n' '\n\0' );"
  5. obtener las dos últimas líneas (es decir, rutas; tail -n 2 , "[email protected]" );
  6. cambie las líneas nuevas y los caracteres NUL nuevamente para obtener una lista de nombres de archivos separados por NUL (tr '\0\n' '\n\0' ).

El xargs El comando es un poco más difícil de explicar. Construye tantos cp ... "dest" comandos según sea necesario para ajustarse a la longitud máxima del comando del sistema operativo, reemplazando el {} token en el comando con el nombre de archivo real (-I "{}" ... "{}" ), utilizando el carácter NUL como separador al leer los parámetros (-0 ).


Puedes probar

cp $(find . -iname "*FooBar*" | tail -2 ) dest

find . -iname "*FooBar*"|tail -n2|xargs -i cp "{}" dest

Lamentablemente, esto no funcionará con nombres de archivo que contengan espacios o saltos de línea.


Linux
  1. Ejemplos de comandos de cola de Linux

  2. cola:comando no encontrado

  3. Salida de tubería a cortar

  4. Encuentra palabras repetidas en un texto

  5. gzip - ¿redireccionamiento o canalización?

Comando de cola de Linux

Comando de cola de Linux con ejemplos

CÓMO UTILIZAR EL COMANDO DE COLA

5 ejemplos prácticos de Tail Command en Linux

Colorear salida de cola

Cola de color de los registros de Apache