Suchen Sie rekursiv nach Dateien mit einer bestimmten Anzahl fester Links

741
imsodin

Ich habe ein "Tracking" -Verzeichnis, das Hardlinks zu Dateien / Verzeichnissen in einem zweiten Verzeichnis enthält (wird für das Tracking von Moves / Renames verwendet). Wenn ich etwas im ursprünglichen Ordner lösche, wird kein Speicherplatz freigegeben, da der Hardlink noch vorhanden ist. Deshalb möchte ich dieses "Tracking" -Verzeichnis regelmäßig bereinigen. Daher muss ich alle Dateien darin finden, die einen Hardlink von 1 haben.

Was ist der schnellste Weg, um rekursiv alle Dateien mit einem Hardlink von 1 zu finden (und zu entfernen)?

Ich weiß, ich kann so etwas wie find . -type f -exec ls -l {} \+ | grep -P "^.1"und dann noch mehr Piping / Reggexing, aber das ist hässlich und langsam. Ich suche etwas saubereres und schneller.

3
Prüfen Sie, ob Ihr `find` die` -links`-Option unterstützt. Kamil Maciorowski vor 7 Jahren 2
@ KamilMaciorowski Vielen Dank. Ich habe die Manpage bloß nur für "hart" gegründet und habe diese Option daher nicht gefunden. imsodin vor 7 Jahren 1

1 Antwort auf die Frage

4
Kamil Maciorowski

Meine findhat -linksOption (ich bin auf Ubuntu 14.04.5 LTS). Um Dateien zu finden, die keine anderen Hardlinks enthalten, verwenden Sie:

find -type f -links 1 

Der Befehl zum Entfernen dieser Dateien lautet:

find -type f -links 1 -exec rm -f {} +