Может ли логическая структура файловой системы (включая цели символических ссылок) быть представлена ​​в одном облегченном файле (не двоичном)?

13

После долгих лет игры с несколькими базами данных SQL и NoSQL я чувствую, что лучший способ для меня обеспечить мобильность в моих личных приложениях, ориентированных на данные, - полностью отказаться от всех достоверных баз данных. Я рассматриваю файловую систему как прекрасную парадигму базы данных, которая является переносимой, удобочитаемой для человека и, следовательно, обладает долговечностью, достаточной для того типа личных приложений, которые я пишу. Это похоже на графическую базу данных, которая обеспечивает древовидную структуру (подходит для разбиения) с символическими ссылками для представления отношений многие-к-одному.

Есть ли способ экспортировать всю топологию файловой системы как один файл? Вывод findкоманды многообещающий, но не существует стандартного способа экспорта данных, указывающих на что указывает символическая ссылка. Я не хочу придумывать свой собственный findформат вывода, такой как:

/home/me/photos/beach/me_and_my_dog.jpg -> /home/me/photos/beach/1.jpg

если кто-то ранее проделал работу по созданию формата экспорта топологии файловой системы.

Другим кандидатом является файл JSON:

home : [{
    me : [{
        photos : [{
            beach : [{
                1.jpg,
                { me_and_my_dog.jpg : ./1.jpg }
            }]
        }]
    }
}]

но опять же есть несколько способов представления типов файлов, и мне интересно, кто-то уже проделал работу по установлению стандарта.

Обратите внимание, что я не хочу экспортировать содержимое файлов - это сделало бы экспорт намного больше, чем нужно.

Шридхар Сарнобат
источник

Ответы:

14

Вывод treeкоманды, кажется, отображает то, что вы ищете:

.
└── photos
    └── beach
        ├── 1.jpg -> me_and_dog.jpg
        └── me_and_dog.jpg

Более новые версии команды будут даже выводить в HTML, XML или JSON.

Вывод XML:

<?xml version="1.0" encoding="UTF-8"?>
<tree>
  <directory name=".">
    <directory name="photos">
      <directory name="beach">
        <link name="1.jpg" target="me_and_dog.jpg"></link>
        <file name="me_and_dog.jpg"></file>
      </directory>
    </directory>
  </directory>
  <report>
    <directories>2</directories>
    <files>2</files>
  </report>
</tree>
heavyd
источник
2
Ого, это именно то, что я хочу. Я знал об этой treeкоманде (это потрясающе), но я не знал, что она теперь поддерживает анализируемые форматы.
Шридхар Сарнобат
1
ПРИМЕЧАНИЕ. Эта treeкоманда является версией для Linux. Версия для Windows по-прежнему выводит только простое «дерево».
Коул Джонсон
2

Вы можете использовать mtreeдля этого. См www.freebsd.org/cgi/man.cgi?query=mtree&sektion=8&manpath=FreeBSD+6.3-RELEASE и code.google.com/p/mtree-port

mtree -c

Это очень универсально.

user400344
источник
Это не вывод JSON, как я лично предпочитаю, но я уверен, что пользователи Mac по достоинству оценят тот факт, что он встроен.
Шридхар Сарнобат