Rak*_*air 1 shell bash shell-script
给定一个挂载点(例如 /dev/sda1),我如何使用 shell 脚本列出该文件系统的内容。我的目标是删除该驱动器中最旧的文件。
/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/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
Run Code Online (Sandbox Code Playgroud)
然后挂载的文件系统中的所有文件都/
可以通过/mnt/side-access-to-root
.
然后,您可以省略,-xdev
并且可以使用zsh
globbing 来删除最旧的文件:
rm -i /mnt/side-access-to-root/**/*(D.Om[1])
Run Code Online (Sandbox Code Playgroud)