Поиск всех символических и жестких ссылок на файл в UNIX

9117
colin.t.welch

Если у меня есть определенный файл в файловой системе UNIX, есть ли способ использовать bash, чтобы найти все ссылки на этот файл, как символические, так и жесткие? Если мне нужны разные команды для каждого, что они?

9

2 ответа на вопрос

8
Dennis Williamson

Попробуйте это с 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но он покажет индекс и другую информацию целевого файла вместо отдельных файлов.

Этот вывод показывает жесткие и символические ссылки? Сим ссылки, обозначенные -> стрелка? aaaidan 14 лет назад 0
@aaaidan: Да, это правильно. Номера индексов x1 и x2 одинаковы, что указывает на то, что они являются жесткими ссылками. Стрелка указывает на символическую ссылку. Использование `-L` и` -samefile` приводит к тому, что оба будут перечислены. Если вы опустите `-L`, тогда символические ссылки не будут следовать (см.` Man find`). Dennis Williamson 14 лет назад 0
2
Ollie Saunders

Если у вас нет GNU Find, вы можете сделать это:

find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)" 

Но это не будет работать для символических ссылок.

О, теперь я вижу, что этот вопрос уже отвечает на это: http://superuser.com/questions/12972/to-see-hardlinks-by-ls Ollie Saunders 14 лет назад 1

Похожие вопросы