
Wie kann ich bei einem Einhängepunkt wie /dev/sda1 den Inhalt dieses Dateisystems mithilfe eines Shell-Skripts auflisten? Mein Ziel ist es, die älteste Datei auf diesem Laufwerk zu löschen.
Antwort1
/dev/sda1
ist ein Blockgerät. Es kann ein Dateisystem enthalten. Wenn es gemountet ist, kann dieses Dateisystem an einem Mount-Punkt wie /home
, verfügbar sein /
, und innerhalb dieses Dateisystems können einige Verzeichnisse wiederum Mount-Punkte für andere Dateisysteme sein (können sich diese in anderen Blockgeräten oder virtuellen Geräten wie /proc
, oder Netzwerkgeräten befinden...).
Wenn /dev/sda1
auf montiert ist /
, um das älteste (hinsichtlich der letzten Änderungszeit) zu entfernen.regulärDatei können Sie auf einem aktuellen GNU-System Folgendes tun:
find / -xdev -type f -printf '%T@:%p\0' |
sort -zn |
sed -z 's/[^:]*://;q' |
xargs -r0p rm -f
Das -xdev
Flag weist an find
, bei einem Dateisystem zu bleiben, das heißt, /
in diesem Fall nicht in andere, darin gemountete Dateisysteme zu wechseln.
Beachten Sie, dass andere Dateisysteme Dateien im Dateisystem ihres Einhängepunkts verbergen können. Wenn beispielsweise /dev/sda1
auf eingehängt ist , /
aber ein enthält /home/some-old-file
und /dev/sda2
auf eingehängt ist /home
, /home/some-old-file
ist darauf nicht zugegriffen werden.
Zumindest unter Linux können Sie dieses Problem umgehen, indem Sie ein Bind-Mounting /
in einem anderen Verzeichnis durchführen:
mount --bind / /mnt/side-access-to-root
/
Dann sind alle Dateien im unter gemounteten Dateisystem über verfügbar /mnt/side-access-to-root
.
Dann können Sie das weglassen -xdev
und Globbing verwenden, zsh
um die älteste Datei zu entfernen:
rm -i /mnt/side-access-to-root/**/*(D.Om[1])
Antwort2
/dev/sda1 ist kein Einhängepunkt, es verweist auf Ihre Partition auf Ihrem Laufwerk.
Um Ihre Festplatte zu mounten, verwenden Sie
mount -t vfat(OR THE TYPE OF YOUR DRIVE) /dev/sda1 /path/to/mount/to
Um dann alle Dateien in einem Pfad aufzulisten, können Sie verwenden
ls
Um jedoch alle Dateien zu löschen, die älter als X Tage sind, können Sie Folgendes verwenden:
find /path/to/files* -mtime +x -exec rm {} \;