GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Mover solo los últimos 8 archivos de un directorio a otro directorio?

Estoy tratando de mover los últimos 8 archivos de Documents directorio a otro directorio, pero no quiero moverlos uno por uno a ese directorio específico. ¿Es posible moverlos con un sustituto de la tail? comando, pero para directorios en lugar de archivos? Quiero decir que me gustaría hacerlo con algo como tail -8 ./Documents | mv ./Anotherdirectory o con mv tail -8 ./Documents ./Anotherdirectory .

De hecho, estoy buscando una forma inteligente de mover los últimos 8 archivos (como se indica en ls ) rápidamente (sin escribir cada nombre) al otro directorio. ¿Alguna sugerencia?

Respuesta aceptada:

Puedes usar for , que recorre los archivos de forma ordenada y nos permite evitar analizar la salida de find o ls , para evitar problemas con espacios y otros caracteres especiales en los nombres de archivo. Muchas gracias a @muru por mejorar esto 🙂

i=0; j=$(stat ~/Documents/* --printf "%in" | wc -l); for k in ~/Documents/*; do if (( (j - ++i) < 8 )); then echo mv -v "$k" ~/AnotherDirectory; fi; done 

Pruébalo primero con echo , luego elimina echo para mover los archivos.

Como guión:

#!/bin/bash
i=0
j=$(stat ~/Documents/* --printf "%in" | wc -l )
for k in ~/Documents/*; do
  if (( (j - ++i) < 8 )); then
    echo mv -v -- "$k" ~/AnotherDirectory
  fi
done

de nuevo, elimine echo después de probar para mover los archivos de verdad

Explicación

  • i=0 diciéndole al shell que comience a iterar en 0
  • j=$(stat ~/Documents/* --printf "%in" | wc -l ) esto es configurar la variable j a un entero igual al número total de archivos en el directorio. Gracias a la respuesta de Serg a mi propia pregunta sobre cómo contar archivos de manera confiable sin importar qué caracteres contengan sus nombres
  • do if (( (j - ++i) < 8 )) para cada iteración del ciclo, pruebe si el resultado de j menos el número de veces que se ha ejecutado el bucle es inferior a 8 y, si es así,
  • mv -v -- "$k" ~/AnotherDirectory mover el archivo al nuevo directorio

Ubuntu
  1. Mover archivos en la terminal de Linux

  2. 5 formas de usar el comando mover en Linux

  3. ¿Cómo mover todos los archivos fuente de Java a su directorio de paquetes respectivo?

  4. ¿Mover archivo al directorio de inicio de otro usuario (sin Sudo)?

  5. Directorios misteriosos en el directorio de inicio?

Cómo mover archivos a otra carpeta usando el Administrador de archivos

Contando el número de archivos en un directorio usando C

¿Cómo mover (y sobrescribir) todos los archivos de un directorio a otro?

Eliminar solo archivos en el directorio en linux NO directorios

¿Cómo puedo enumerar (ls) los 5 últimos archivos modificados en un directorio?

¿Cuál es la forma más rápida de mover un millón de imágenes de un directorio a otro en Linux?