Как предотвратить исправление неработающей символической ссылки в ruby ​​File - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть общий метод сортировки файлов, который падает из-за неработающей ссылки в одном каталоге.Кажется, ruby ​​пытается разрешить символическую ссылку.Это происходит, когда я сортирую по методу, например :mtime или :size.

Я хочу, чтобы ruby ​​File взял данные из файла ссылок (в текущем каталоге) сам, не разрешая его.Когда я запускаю Unix stat в указанном файле, который дает , дает мне mtime, atime, ctime и т. Д., Я хотел бы использовать это.

например File.mtime("mail") и File.stat("mail").mtimeоба дают мне ENOENT.

Обратите внимание, что когда я запускаю stat mail в irb (статистика в обратных галочках), я получаю информацию для файла.

Мой оригинальный код был:

files = files.sort_by { |f| File.send(func, f) }

, где func - это символ метода, передаваемый этому методу, например :mtime или :atime или :size и т. Д.

Моя текущая попытка проверяет наличие файла, нозатем не знает, что делать, чтобы получить значения из рассматриваемого файла.

files = files.sort_by do |f| 
    if File.exist? f
       File.send(func, f) }
    else
      # dead link what to do here? I don't want ruby to resolve f
    end
end

edit: просто чтобы уточнить.Я не хочу скрыть мертвые ссылки.Я должен показать запись с информацией о самом файле так же, как это сделал бы Finder или любой другой файловый менеджер.

edit: см. Ответ ниже.lstat выдаст информацию о битых ссылках.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

lstat - это то, что нужно в случае неработающей ссылки.

 File.lstat("deadlink").mtime

вернет mtime референта. Сначала нужно проверить File.symlink?("deadlink"), и если это правда, можно использовать lstat для получения подробностей.

0 голосов
/ 04 апреля 2019

как то так

files = files.map do |f|
          f = nil unless File.exist?(f)
          f
        end.compact.sort_by { |f| File.send(func, f) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...