
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 cat
manual, 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 cat
deba tratar su entrada estándar como nombres de archivo. lo que necesitas es
ls | ordenar | cola -3 | gato xargs
en cambio.
Consulte xargs
la página de manual para obtener más información:http://linux.about.com/library/cmd/blcmdl1_xargs.htm
Respuesta2
La salida de ls
ya está ordenada de forma predeterminada de la misma manera que sort
la clasificación predeterminada, por lo que sort
no es necesaria.
La forma más común de pasar una lista generada de archivos a un comando es usar xargs
. Consulte la xargs
página de manual para obtener más detalles, pero en este caso no necesita ninguna opción. ( xargs
Puede 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 tail
utilizada en muchos sistemas Linux hoy en día no se acepta solo -3
como opción. Requiere que uses -n3
.
Finalmente, cat
al 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 tail
en 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
.