2016-07-12 2 views
0

У меня есть терминал, который открыт на папку A:Текущий каталог после того, как был перемещен другим пользователем

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

Другой пользователь переместил папку в другое место

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

Я хотел бы узнайте, куда он его переместил.

Старый терминал все еще работает, но pwd показывает старый путь, потому что работает файловая система Linux. Старый абсолютный путь не существует, конечно:

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 

Я думал о прохождении верхней иерархии и искать нужную папку на каждом уровне:

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

Однако это решение может быть очень трудно, если один из уровни содержат много подкаталогов. В моем конкретном случае это невозможно, так как у меня нет разрешений на одном из верхних уровней.

Возможно, невозможно найти точный путь из-за того, как работает linux fs (например, может быть много жестких ссылок для одного и того же каталога). Мне не нужны некоторые кандидаты на путь, есть ли способ найти абсолютный путь, который позволяет мне подойти к каталогу?

+0

'find/-d -name" a "'? Или на основе «Другой пользователь переместил папку в другое место», может быть, проверить свою историю? – 123

+0

Я не знаю, кто является пользователем (на самом деле это был ИТ-пользователь). Кроме того, если у меня было очень не специальное имя каталога (например, ...), это не сработает. Кроме того, он может переименовать каталог (в приведенном выше примере он переименовал его в «знать», если раньше не было каталога «знать». – MaMazav

ответ

0

Отвечая на мой собственный вопрос: я могу использовать Lsof на уникально имени вложенной (я должен пройти в него, так что считается «открыт»):

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 

Это можно сделать, только если у меня есть такая папка или у вас есть права на запись в папку. В качестве альтернативы, если я знаю, что папка не была переименована и имеет специальное имя, я могу просто попробовать «lsof | grep a».

(На основе идеи, предложенной здесь в удаленном ответе ...).

+1

Чтобы войти в него, вам нужно было знать, где находится верхняя папка. Этот ответ не имеет смысла. – 123

+0

Это сработало для меня ... так или иначе, поскольку я сказал, что у меня уже есть открытый терминал в каталоге, но оболочка думает, что это старый путь. – MaMazav

+0

В этом примере вы не перемещали каталог. – Zuzzuc

2

Вы можете попробовать find/-d -name "a" -exec cd {} \;, чтобы перейти в перемещенный каталог, при условии, что пользователь не изменил его имя. Если вы хотели бы получить путь к перемещенной директории использовать find/-d -name "a" -exec echo "path is {}" \;

EDIT

Если есть несколько каталогов с тем же именем, и вы знаете, когда реж был перемещен, используй find/-d -name "a" -mmin -$minutes -exec echo "path is {}" \; где $minutes время он был изменен на, чтобы найти все имена dirs name «a», измененные за указанный период времени.

Если кто-то переименовал и переместил указатель, вам нужно выполнить ручную работу. Используйте find/-d -mmin -$minutes -ls, чтобы перечислить все dirs, измененные в течение указанного периода времени.

Как hellerpop говорит, вы можете захотеть использовать -cmin вместо -mmin

+1

Я думаю, что mv влияет только на ctime, а не на mtime, поэтому вам лучше использовать -cmin. – hellerpop

+0

плюс 1 за идею, но это не мое дело. – MaMazav

Смежные вопросы