
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/sda1
es 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/sda1
está 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 -xdev
bandera indica find
que 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/sda1
está montado en /
pero contiene /home/some-old-file
y /dev/sda2
está montado en /home
, /home/some-old-file
no 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 -xdev
y podrías usar zsh
globbing 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 {} \;