给定一个挂载点(例如 /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/sda1
is Mounted on/
但包含一个/home/some-old-file
and /dev/sda2
is Mounted on /home
,/home/some-old-file
将不可访问。
至少在 Linux 上,您可以通过/
在另一个目录中绑定安装来解决这个问题:
mount --bind / /mnt/side-access-to-root
然后挂载在文件系统中的所有文件/
都可以通过/mnt/side-access-to-root
.
然后,您可以省略-xdev
,并且可以使用zsh
globbing 来删除最旧的文件:
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 {} \;