Czy istnieje jeden sposób na wykrycie, czy katalog / plik / dowiązanie symboliczne / etc? istota (bardziej uogólniona) istnieje?
Potrzebuję jednej funkcji, ponieważ muszę sprawdzić tablicę ścieżek, które mogą być katalogami, plikami lub dowiązaniami symbolicznymi. Wiem, że File.exists?"file_path"
działa dla katalogów i plików, ale nie dla linków symbolicznych (co jest File.symlink?"symlink_path"
).
true
jeśli dowiązanie symboliczne istnieje, niezależnie od tego, czy ostatecznie można je przekształcić w nie dowiązanie symboliczne. Oznacza to, że powinien powrócić również wtrue
przypadku uszkodzonych linków.File.exists?
zwróci tylkotrue
dla łącza symbolicznego, które nie jest uszkodzone.Odpowiedzi:
Standardowy moduł plików ma dostępne zwykłe testy plików :
RUBY_VERSION # => "1.9.2" bashrc = ENV['HOME'] + '/.bashrc' File.exist?(bashrc) # => true File.file?(bashrc) # => true File.directory?(bashrc) # => false
Powinieneś być w stanie znaleźć tam to, czego chcesz.
Oczywiście, że nie. Ok, spróbuj czegoś takiego:
def file_dir_or_symlink_exists?(path_to_file) File.exist?(path_to_file) || File.symlink?(path_to_file) end file_dir_or_symlink_exists?(bashrc) # => true file_dir_or_symlink_exists?('/Users') # => true file_dir_or_symlink_exists?('/usr/bin/ruby') # => true file_dir_or_symlink_exists?('some/bogus/path/to/a/black/hole') # => false
źródło
ENV['HOME'] + '/.bashrc'
), co może nie działać na wielu platformach. Powinieneś użyć złączeń Ruby File i dlaczego nie zacząć od tego,Rails.root
jeśli używasz Railsów.File.exists?(Rails.root.join('db', 'my_seeds.csv')
/
nie jest jednak problemem, ponieważ IO Rubiego automatycznie konwertuje z ukośników w przód na ukośniki w systemie Windows .bash
w menu Start, aw wynikowym oknie konsolicat ~/.bashrc
generuje dane wyjściowe. ¯ \ _ (ツ) _ / ¯Dlaczego nie zdefiniować własnej funkcji
File.exists?(path) or File.symlink?(path)
i jej nie wykorzystać?źródło