マウントポイント(例:/ dev / sda1)が与えられたら、シェルスクリプトを使用してそのファイルシステムの内容をどのように一覧表示できますか?私の目標は、このドライブから最も古いファイルを削除することです。
答え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
マウントされているが、が/
含まれていて次にマウント/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
その後、これを省略してglobbingを使用して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 {} \;