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

Rak*_*air 1 shell bash shell-script

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

Sté*_*las 5

/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
Run Code Online (Sandbox Code Playgroud)

-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
Run Code Online (Sandbox Code Playgroud)

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

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

rm -i /mnt/side-access-to-root/**/*(D.Om[1])
Run Code Online (Sandbox Code Playgroud)