Cómo enumerar archivos y directorios de un punto de montaje

Cómo enumerar archivos y directorios de un punto de montaje

Dado un punto de montaje como /dev/sda1, ¿cómo puedo enumerar el contenido de este sistema de archivos usando un script de shell? Mi objetivo es eliminar el archivo más antiguo de esta unidad.

Respuesta1

/dev/sda1es un dispositivo de bloque. Puede contener un sistema de archivos. Cuando se monta, ese sistema de archivos puede estar disponible en algún punto de montaje como /home, /y dentro de ese sistema de archivos, algunos directorios pueden a su vez ser puntos de montaje para otros sistemas de archivos (pueden estar en otros dispositivos de bloque o virtuales como /proc, o los de red...).

Si /dev/sda1está montado en /, para eliminar el más antiguo (en términos de la hora de la última modificación)regulararchivo, en un sistema GNU reciente, puede hacer:

find / -xdev -type f -printf '%T@:%p\0' |
   sort -zn |
   sed -z 's/[^:]*://;q' |
   xargs -r0p rm -f

La -xdevbandera indica findque se ciña a un sistema de archivos, es decir, que en este caso no descienda a otros sistemas de archivos montados en él /.

Tenga en cuenta que otros sistemas de archivos pueden ocultar archivos en el sistema de archivos de su punto de montaje. Por ejemplo, si /dev/sda1está montado en /pero contiene /home/some-old-filey /dev/sda2está montado en /home, /home/some-old-fileno será accesible.

Al menos en Linux, puedes solucionar este problema mediante el montaje mediante enlace /en otro directorio:

mount --bind / /mnt/side-access-to-root

Entonces todos los archivos en el sistema de archivos montado en /estarán disponibles a través de /mnt/side-access-to-root.

Luego, puedes omitir el archivo -xdevy podrías usar zshglobbing para eliminar el archivo más antiguo:

rm -i /mnt/side-access-to-root/**/*(D.Om[1])

Respuesta2

/dev/sda1 no es un punto de montaje, apunta a su partición en su disco.

Para montar su disco utilice

mount -t vfat(OR THE TYPE OF YOUR DRIVE) /dev/sda1 /path/to/mount/to

Luego, para enumerar todos los archivos en una ruta, puede usar

ls

Sin embargo, para eliminar todos los archivos de más de X días, puedes utilizar:

find /path/to/files* -mtime +x -exec rm {} \;

información relacionada