2016-07-12 8 views
0

Ich habe einen Terminal, das auf einem Ordner ein geöffnet:Aktuelles Verzeichnis nach wurde von einem anderen Benutzer bewegt

hostname:/path/to> mkdir a 
hostname:/path/to> cd a 
hostname:/path/to/a> cat > b.txt 

Ein anderen Benutzer die Ordner an einem anderen Ort

hostname:/path/to> mv a /another/hidden/path/i/dont/know 

bewegt hat, würde Ich mag an wissen wo er es bewegt hat.

Das alte Terminal funktioniert immer noch, aber pwd zeigt den alten Pfad, weil das Linux-Dateisystem funktioniert. Old absoluter Pfad existiert nicht natürlich:

hostname:/path/to/a> ls 
b.txt 
hostname:/path/to/a> pwd 
/path/to/a 
hostname:/path/to/a> ls /path/to/a 
ls: cannot access /path/to/a: No such file or directory 

Ich dachte an die obere Hierarchie durchlaufen und in jeder Ebene für die richtigen Ordner aussehen:

hostname:/path/to/a> ls ../ 
... 
hostname:/path/to/a> ls ../../ 
... 
hostname:/path/to/a> ls ../../../ 
... 

Jedoch kann diese Lösung sehr schwierig sein, wenn man von der Ebenen enthalten viele Unterverzeichnisse. In meinem speziellen Fall ist das nicht möglich, da ich keine Berechtigungen in einer der oberen Ebenen habe.

Ich denke, es kann unmöglich sein, den genauen Pfad zu finden, aufgrund der Art, wie Linux fs funktioniert (z. B. kann es eine Menge fester Links für das gleiche Verzeichnis geben). Es ist mir egal, ob ich Kandidaten für den Pfad finde. Gibt es eine Möglichkeit, einen absoluten Pfad zu finden, der es mir ermöglicht, das Verzeichnis aufzurufen?

+0

'finde/-d -name" a "'? Oder basierend auf 'Ein anderer Benutzer hat den Ordner an einen anderen Ort verschoben' vielleicht überprüfen Sie ihren Verlauf? – 123

+0

Ich weiß nicht, wer der Benutzer ist (eigentlich war es ein IT-Benutzer). Außerdem, wenn ich einen sehr speziellen Verzeichnisnamen hätte (z. B. a ...), wird es nicht funktionieren. Außerdem könnte er das Verzeichnis umbenennen (im obigen Beispiel hat er es in "wissen" umbenannt, wenn es vorher kein "wissen" -Verzeichnis gab.) – MaMazav

Antwort

0

Beantwortung meiner Frage verwenden: ich auf einem eindeutigem Namen Unterordner verwenden lsof kann (Ich sollte in sie durchqueren, so dass es gilt als „geöffnet“):

hostname:/path/to/a> mkdir uniquely_named_directory 
hostname:/path/to/a> cd uniquely_named_directory 
hostname:/path/to/a/uniquely_named_directory> lsof | grep uniquely_named_directory 

Es kann nur geschehen, wenn ich einen solchen Ordner oder Schreibrechte für den Ordner. Alternativ, wenn ich weiß, dass der Ordner nicht umbenannt wurde und einen Namen hat, der speziell genug ist, kann ich einfach "lsof | grep a" versuchen.

(Basierend auf Idee hier in einer gelöschten Antwort vorgeschlagen ...).

+1

Um hinein zu cd müssen Sie wissen, wo der oberste Ordner war. Diese Antwort ergibt keinen Sinn. – 123

+0

Es funktionierte für mich ... Wie auch immer, ich habe bereits ein geöffnetes Terminal im Verzeichnis, aber die Shell denkt, dass es der alte Pfad ist. – MaMazav

+0

Sie haben das Verzeichnis in diesem Beispiel nie verschoben. – Zuzzuc

2

Sie können versuchen, find/-d -name "a" -exec cd {} \; in das verschobene Verzeichnis wechseln, vorausgesetzt, dass der Benutzer seinen Namen nicht geändert hat. Wenn Sie möchten, dass der Pfad zum bewegten Verzeichnis erhalten verwendet find/-d -name "a" -exec echo "path is {}" \;

EDIT

Wenn es mehr Verzeichnisse mit dem gleichen Namen sind, und Sie wissen, wenn das Verzeichnis verschoben wurde, find/-d -name "a" -mmin -$minutes -exec echo "path is {}" \; zu verwenden, wo $minutes die Zeit Es wurde geändert, um den Namen "a" zu finden, der im angegebenen Zeitraum geändert wurde.

Wenn jemand das Verzeichnis umbenannt und verschoben hat, müssen Sie manuell arbeiten. Verwenden Sie find/-d -mmin -$minutes -ls, um alle innerhalb des angegebenen Zeitraums geänderten Pfade aufzulisten.

Wie hellerpop sagt, möchten Sie vielleicht -cmin statt -mmin

+1

Ich denke, mv beeinflusst nur die ctime nicht mtime, also solltest du lieber -cmin verwenden. – hellerpop

+0

plus 1 für die Idee, aber das ist nicht mein Fall. – MaMazav