
Учитывая точку монтирования, например /dev/sda1, как я могу вывести список содержимого этой файловой системы с помощью скрипта оболочки. Моя цель — удалить самый старый файл на этом диске.
решение1
/dev/sda1
является блочным устройством. Оно может содержать файловую систему. При монтировании эта файловая система может быть доступна в некоторой точке монтирования, например /home
, /
, и внутри этой файловой системы некоторые каталоги могут, в свою очередь, быть точками монтирования для других файловых систем (они могут находиться в других блочных устройствах, или виртуальных, например /proc
, , или сетевых...).
Если /dev/sda1
смонтировано на /
, удалить самую старую (с точки зрения времени последней модификации)обычныйfile, в последней системе GNU вы можете сделать следующее:
find / -xdev -type f -printf '%T@:%p\0' |
sort -zn |
sed -z 's/[^:]*://;q' |
xargs -r0p rm -f
Флаг -xdev
указывает find
придерживаться одной файловой системы, то есть не переходить в другие файловые системы, смонтированные /
в данном случае.
Обратите внимание, что другие файловые системы могут скрывать файлы в файловой системе своей точки монтирования. Например, если /dev/sda1
смонтировано на /
, но содержит /home/some-old-file
и /dev/sda2
смонтировано на /home
, /home/some-old-file
не будет доступно.
По крайней мере, в Linux вы можете обойти это, выполнив привязку монтирования /
в другом каталоге:
mount --bind / /mnt/side-access-to-root
Тогда все файлы в смонтированной файловой системе /
будут доступны через /mnt/side-access-to-root
.
Затем вы можете опустить -xdev
и использовать zsh
подстановку для удаления самого старого файла:
rm -i /mnt/side-access-to-root/**/*(D.Om[1])
решение2
/dev/sda1 — это не точка монтирования, а указатель на раздел на вашем диске.
Чтобы смонтировать диск, используйте
mount -t vfat(OR THE TYPE OF YOUR DRIVE) /dev/sda1 /path/to/mount/to
Затем, чтобы получить список всех файлов по указанному пути, вы можете использовать
ls
Однако, чтобы удалить все файлы старше X дней, вы можете использовать:
find /path/to/files* -mtime +x -exec rm {} \;