redireccionamiento - scripts linux ejercicios resueltos
pasar la salida como un argumento para cp en bash (4)
Podría ser:
cp `ls -SF | grep -v / | head -5` Directory
Suponiendo que la tubería es correcta. Los backticks sustituyen en la línea la salida de los comandos dentro de ella.
También puedes hacer tus pruebas:
cp `echo a b c` Directory
copiará todos los a
, b
, c
en el Directory
.
Esta pregunta ya tiene una respuesta aquí:
Estoy tomando una clase de Unix / Linux y todavía tenemos que aprender variables o funciones. Acabamos de aprender algunas utilidades básicas como el indicador y canalización, salida y anexar al archivo. En la tarea de laboratorio, quiere que encontremos los archivos más grandes y los copiemos en un directorio.
Puedo obtener los 5 archivos más grandes pero no sé cómo pasarlos a cp en un solo comando
ls -SF | grep -v / | head -5 | cp ? Directory
Si su cp
tiene un indicador "-t" (verifique la página del manual), eso simplifica un poco las cosas:
ls -SF | grep -v / | head -5 | xargs cp -t DIRECTORY
El comando Encontrar le brinda una capacidad más precisa para obtener lo que desea, en lugar de ls | grep
ls | grep
que tienes. Yo codificaría tu pregunta de esta manera:
find . -maxdepth 1 -type f -printf "%p/t%s/n" |
sort -t $''/t'' -k2 -nr |
head -n 5 |
cut -f 1 |
xargs echo cp -t DIRECTORY
Use las comillas invertidas `like this` o el signo de dólar $ (como esta) para realizar la sustitución de comandos. Básicamente, esto pega cada línea de salida estándar del comando backticked en el comando circundante y lo ejecuta. Obtenga más información en la página de manual de bash en "Sustitución de comandos".
Además, si desea leer una línea a la vez, puede leer líneas individuales fuera de un flujo de tubería utilizando la sintaxis "mientras lee":
ls | while read varname; do echo $varname; done
Yo lo haría:
cp $(ls -SF | grep -v / | head -5) Directory
Sin embargo, xargs probablemente sería la mejor respuesta.
ls -SF | grep -v / | head -5 | xargs -I{} cp "{}" Directory