
/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
1 つのファイル システムに固執すること、つまり、/
この場合にマウントされている他のファイル システムに降りないことを指示します。
他のファイル システムでは、マウント ポイントのファイル システム上のファイルが非表示になる場合があることに注意してください。たとえば、/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
、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 {} \;