Если у меня есть определенный файл в файловой системе 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)"
Но это не будет работать для символических ссылок.