Как в Linux узнать путь к файлу?
невозможно, кроме как сканированием всей фс
кроме того, не во всех файловых системах есть настоящие иноды с номерами
кроме того, не во всех файловых системах есть настоящие иноды с номерами
Ясно, тогда задам вопрос по-другому. Как определить уникальность файла?
Например один и тот же файл может быть задан тысячью способов:
some.file
~/somedir/some.file
../somedir/some.file
/home//somedir/somefile
/home//..//somedir/../..//somedir/some.file
etc
А мне нужно знать, что это один и тот же файл
Например один и тот же файл может быть задан тысячью способов:
some.file
~/somedir/some.file
../somedir/some.file
/home//somedir/somefile
/home//..//somedir/../..//somedir/some.file
etc
А мне нужно знать, что это один и тот же файл
Анонимус прав.
Хочется добавить, что описанное тобой соответствие (зачастую) не является однозначным.
P.S. Сразу вспомнилась пословица про половину ответа.
Хочется добавить, что описанное тобой соответствие (зачастую) не является однозначным.
P.S. Сразу вспомнилась пословица про половину ответа.
1. символ '~' ядро не понимает, его раскрывает шелл
2. если нужен именно полный путь, есть realpath(3)
3. если нужен сам файл, независимо от имени, то хорошего способа AFAIK нет, можно посмотреть, как это делают tar, cp, rsync, которые умеют детектировать жёсткие ссылки
2. если нужен именно полный путь, есть realpath(3)
3. если нужен сам файл, независимо от имени, то хорошего способа AFAIK нет, можно посмотреть, как это делают tar, cp, rsync, которые умеют детектировать жёсткие ссылки
Ну ты же знаешь как получить инод файла? По иноду и отличай.
Также можно определить сколько хардлинков на этот инод.
И симлинки тоже легко распознаются.
Также можно определить сколько хардлинков на этот инод.
И симлинки тоже легко распознаются.
Спасибо за realpath
думаю, это решит мои проблемы
Кстати, насчет неоднозначности - просто, хотел узнать в какой ситуации это может быть не один и тот же файл?
думаю, это решит мои проблемы
Кстати, насчет неоднозначности - просто, хотел узнать в какой ситуации это может быть не один и тот же файл?
хотел узнать в какой ситуации это может быть не один и тот же файл?
Иноды разные (с учётом разных разделов).
2:
Это да, но хотелось бы просто выводить сообщение типа "ошибка при обработке файла /some/bad/file" вместо "ошибка при обработке файла с инодом 31337" может выглядеть не очень информативно - я например не знаю, как этот файл найти
Это да, но хотелось бы просто выводить сообщение типа "ошибка при обработке файла /some/bad/file" вместо "ошибка при обработке файла с инодом 31337" может выглядеть не очень информативно - я например не знаю, как этот файл найти
почему бы не указывать в сообщении то имя, которое и использовалось для работы, как это делают все?
На каждый файл структура из двух полей - имя и инод.
Различать по иноду, а выводить имя.
В чём вопрос?
Различать по иноду, а выводить имя.
В чём вопрос?
имя локальное, а прога лазит по всему диску - получается надо знать еще и каталог, где файл был взят
я наверное всех запутал - в общем, прога обрабатвает в фалах фишки типа #include "foo.bar" и в этом месте вставляет этот файл. А в том файле может быть опять #include "bar.foo" и т.д - это делается рекурсией и вдруг где-то встречается #include file - это ошибка, а как узнать какой это файл?
я наверное всех запутал - в общем, прога обрабатвает в фалах фишки типа #include "foo.bar" и в этом месте вставляет этот файл. А в том файле может быть опять #include "bar.foo" и т.д - это делается рекурсией и вдруг где-то встречается #include file - это ошибка, а как узнать какой это файл?
2: ну в общем-то, я уже так и сделал - вопрос только в выводе абсолютного пути
А честно говоря, я уже просто увлекся разговором с умными людьми - проблема в принципе решена
А честно говоря, я уже просто увлекся разговором с умными людьми - проблема в принципе решена
если сама ползает, то знает, где находится
Оставить комментарий
Biglem
Такая фишка, нужно зная inode файла вывести абсолютный путь к нему.например f(41431) = "/usr/local/bin/mc"
Это же должно быть возможно.
Может кто знает, я уже две недели бьюсь - все перепробовал, не получается.