Иногда я чувствую себя как каталог, иногда я чувствую себя как обычный файл

В организационных целях я хотел бы, чтобы определенный объект файловой системы, который большую часть времени появляется как файл, иногда появляется в виде каталога.

Основная идея состоит в том, что в общем случае для cp , mv , find , updatedb / locate я хотел бы, чтобы объект отображался как отдельный файл. Для других приложений, таких как vlc , rythmbox , feh и okular , я хотел бы, чтобы он отображался как каталог. Может кто-нибудь предложить механизм для этого?

Для иллюстрации позвольте мне привести пример:

Я дам объект, который я имею в виду, имя _my_books_on_m4_programming.arch_. Для перемещения / копирования или поиска / поиска этого объекта выглядит как файл, но когда я хочу прочитать книгу в объекте, он выглядит как каталог, например: для команды okular my_books_on_m4_programming.arch/beginner/m4_for_dummies.pdf .

Я думал о двух с половиной возможных решениях, но нуждался в помощи с одним из них.

  • Первый заключается в том, чтобы изменить мой Linux, чтобы использовать специальный атрибут файловой системы. Если атрибут установлен, то я ищу экологию, например SPECIAL_OBJECT_IS_FILE . Если он установлен, я рассматриваю его как файл. Если он не установлен, я рассматриваю его как каталог. Проблема с этим подходом заключается в том, что я не вижу, как его реализовать, не изменяя практически всю систему.

  • Второй способ – хранить файлы в архиве (например, tar, zip, rar), который я монтирую (rw) в какой-то каталог. Для обработки объекта в виде архива обратитесь к исходному архиву, чтобы обработать объект как каталог, относящийся к точке монтирования. Это возможно?

  • Метод половин – это просто поворот на втором, вместо того, чтобы монтировать архив, я создаю ссылку на него. Возможно ли подобное?

Я не могу поверить, что никто никогда не хотел делать подобное, поэтому я подозреваю, что есть какой-то способ. Suggestionss?

ОК. Признаюсь, у меня возникли проблемы с заголовком моего вопроса, поэтому я попытался сделать шутку из очень старой рекламы – извините.

  • Различные форматы объектных файлов в Linux
  • Кодировщик в формате msrle с FFMPEG
  • Не удалось выполнить команду head или tail для файла
  • Как уменьшить размер файла mpeg с помощью командной строки?
  • Как получить структуру базы данных GDBM
  • 2 Solutions collect form web for “Иногда я чувствую себя как каталог, иногда я чувствую себя как обычный файл”

    Я не совсем понимаю, почему вы не хотите, чтобы файлы отображались как отдельные файлы в некоторых случаях. В конце концов, если my_books_on_m4_programming.arch – это каталог, вы все равно можете скопировать его с помощью cp -rp , найти его с помощью locate и так далее.

    FUSE (файловая система в пользовательском пространстве) обеспечивает способ создания облегченных файловых систем, и существует множество файловых систем FUSE, которые предоставляют альтернативные представления существующих файлов. Создание одного и того же файла (например, одного и того же пути к файлу) появляется как в виде каталога, так и в обычном файле, что приведет к запутыванию многих приложений, но существует много существующих решений для того, чтобы один и тот же файл отображался как каталог в одном месте и как файл в другое место.

    В частности, AVFS создает архивы и удаленные файлы в виде каталогов. Я думаю, что это самое близкое к тому, что вы ищете.

     $ mountavfs $ ls my_books_on_m4_programming* my_books_on_m4_programming.tgz $ tar tzf my_books_on_m4_programming.tgz beginner/m4_for_dummies.pdf $ ls ~/.avfs$PWD/my_books_on_m4_programming.tgz\#/ beginner $ okular ~/.avfs$PWD/my_books_on_m4_programming.tgz\#/beginner/m4_for_dummies.pdf 

    Вы можете использовать файловые системы loopback.

    Сначала создайте файл, который будет содержать вашу файловую систему:

     dd if=/dev/zero of=~/myfilesys bs=8K count=256 

    Это создаст пустой файл размером 2 ГБ. Затем вам нужно прикрепить его к устройству loopback:

     losetup /dev/loop0 ~/myfilesys 

    Теперь создайте файловую систему:

     mkfs -t ext3 /dev/loop0 

    Наконец, смонтируйте свою файловую систему:

     mkdir ~/myfilesys.d mount /dev/loop0 ~/myfilesys.d 

    Когда вы закончите:

     umount /dev/loop0 losetup -d /dev/loop0 

    И повторное использование позже:

     losetup /dev/loop0 ~/myfilesys mount /dev/loop0 /mnt/myfilesys.d 

    (Да, я знаю, что вы можете комбинировать шаги losetup и mount , но для иллюстративных целей становится яснее видеть, что происходит, разбивая их).

    Теперь файл ~/myfilesys будет выглядеть и действовать как файл для всех команд, но при установке вы можете увидеть файлы в этой файловой системе в ~/myfilesys.d .

    Linux и Unix - лучшая ОС в мире.