Intentando captar el resultado de los comandos canalizados

Intentando captar el resultado de los comandos canalizados

Tengo una carpeta de archivos que se llaman list20140801.txt list20140802.txt....

Estoy tratando de hacer esto

ls | sort | tail -3 | cat

Pero solo me da los nombres de los archivos, no los copia.

Respuesta1

Según el catmanual, el trabajo del gato es:

Concatene ARCHIVO(s), o entrada estándar, a la salida estándar.

No hay ninguna razón por la que catdeba tratar su entrada estándar como nombres de archivo. lo que necesitas es

ls | ordenar | cola -3 | gato xargs

en cambio.

Consulte xargsla página de manual para obtener más información:http://linux.about.com/library/cmd/blcmdl1_xargs.htm

Respuesta2

La salida de lsya está ordenada de forma predeterminada de la misma manera que sortla clasificación predeterminada, por lo que sortno es necesaria.

La forma más común de pasar una lista generada de archivos a un comando es usar xargs. Consulte la xargspágina de manual para obtener más detalles, pero en este caso no necesita ninguna opción. ( xargsPuede que no haga lo que desea si tiene una gran cantidad de archivos, pero en la mayoría de los casos funciona bien sin que tenga que pensar en eso).

La versión tailutilizada en muchos sistemas Linux hoy en día no se acepta solo -3como opción. Requiere que uses -n3.

Finalmente, catal final de su canalización no hace nada útil, por lo que también puede omitirse.

Este comando debería hacer lo que quieras.

ls | xargs tail -n3

Actualizar

Acabo de leer la respuesta de @AtomicHeartFather y me di cuenta de que es posible que haya puesto la respuesta tailen la parte equivocada del problema. En ese caso, el comando sería

ls | tail -n3 | xargs cat

que es más o menos lo que escribió AtomicHeartFather excepto por el archivo sort.

información relacionada