如何列出挂载点的文件和目录

如何列出挂载点的文件和目录

给定一个挂载点(例如 /dev/sda1),我如何使用 shell 脚本列出该文件系统的内容。我的目标是删除该驱动器中最旧的文件。

答案1

/dev/sda1是一个块设备。它可能包含文件系统。安装时,该文件系统可能在某个安装点(如 、 、 )处可用/home/并且在该文件系统内,某些目录可能又是其他文件系统的某些安装点(它们可能位于其他块设备中,或虚拟设备中,如/proc、 或网络的...)。

如果/dev/sda1安装在 上/,则删除最旧的(就上次修改时间而言)常规的文件,在最近的 GNU 系统上,您可以执行以下操作:

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

-xdev标志告诉find您坚持使用一个文件系统,也就是说,不要进入/在这种情况下安装的其他文件系统。

请注意,其他文件系统可能会隐藏其安装点的文件系统上的文件。例如,如果/dev/sda1is Mounted on/但包含一个/home/some-old-fileand /dev/sda2is Mounted on /home/home/some-old-file将不可访问。

至少在 Linux 上,您可以通过/在另一个目录中绑定安装来解决这个问题:

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

然后挂载在文件系统中的所有文件/都可以通过/mnt/side-access-to-root.

然后,您可以省略-xdev,并且可以使用zshglobbing 来删除最旧的文件:

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 {} \;

相关内容