Якщо я маю конкретний файл у файловій системі UNIX, чи існує спосіб використання bash для пошуку всіх посилань на цей файл, як символічних, так і жорстких? Якщо мені потрібні різні команди для кожного, які вони?
Якщо я маю конкретний файл у файловій системі UNIX, чи існує спосіб використання bash для пошуку всіх посилань на цей файл, як символічних, так і жорстких? Якщо мені потрібні різні команди для кожного, які вони?
Відповіді:
Спробуйте це з GNU find
:
find /start/dir -L -samefile /file/to/check -exec ls -li {} \;
Приклад виводу:
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1
Ви можете використовувати -ls
замість цього, -exec
але він покаже вкладку та іншу інформацію цільового файлу замість окремих файлів.
-L
та -samefile
причини переліку обох. Якщо ви пропустите, -L
символічні посилання не дотримуються (див. man find
).
Якщо у вас немає GNU Find, ви можете зробити це:
find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"
Але це не працюватиме для символічних посилань.