Как я могу создать файловую систему “представление” папки, которая исключает определенные файлы?

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

original-path
├── file1
├── file2
├── file3
├── file4
├── folder1
│  ├── file1
│  └── file2
└── folder2
    ├── file1
    └── file2

Я хочу смочь исключить /file1, /folder1/file1, и /folder2 от нового пути, который иначе указывает на те же данные:

new-path
├── file2
├── file3
├── file4
└── folder1
   └── file2

Как я могу выполнить это? Некоторый связывать монтируются, файловая система FUSE или умная схема соединения?

7
задан 24 May 2011 в 07:44

3 ответа

rofs-фильтрованный, файловая система FUSE, полученная из Файловой системы Только для чтения, может исключить файлы с помощью регулярных выражений:

$ cat rofs-filtered.rc 
^/file1$
^/folder1/file1$
^/folder2$
$ rofs-filtered -c /home/ak/sandbox/rofs-filtered.rc /home/ak/sandbox/original-path /home/ak/sandbox/new-path
$ tree {original,new}-path
original-path
├── file1
├── file2
├── file3
├── file4
├── folder1
│  ├── file1
│  └── file2
└── folder2
    ├── file1
    └── file2
new-path
├── file2
├── file3
├── file4
└── folder1
    └── file2

rofs-фильтрованный не доступно в репозиториях Ubuntu, но я запустил запрос, чтобы иметь добавленный.

3
ответ дан 23 November 2019 в 06:34

Я думаю, что Вы уже находитесь на правильной странице. Вы упомянули эти две вещи, которые я предложил бы.

FUSE по-видимому довольно прост застрять в. У меня был подобный вопрос этому некоторое время назад, и один из ответов упомянул FUSE. Я нашел более простую опцию (который я объясню через секунду), но если это не желательно, FUSE могло бы стоить исследовать.

Моя проблема была, у меня есть входящий каталог, где клиенты выводят все виды дерьма. Мне был нужен путь, которому позволят отсортировать их в глубокие каталоги (например, /work/client-name/project/document.ext) но все еще имейте схватывание верхнего уровня для наблюдения то, что было новым. Я записал немного сценария удара, который поддержал "недавний" каталог, который содержал символьные ссылки на недавнее содержание.

Что-то столь простое, как это могло бы работать на Вас. Просто продолжайте объединять в цепочку на -not -name аргументы или фильтр положительно, если у Вас есть что-то, которое можно искать...

#!/bin/bash

rm new-path/* # clean up old symlinks
find original-path -type d -maxdepth 1 -not -name folder2\
    -exec ln -s -t new-path/ {} +

Это только сначала находится на одном уровне, но Вы могли развернуть его до:

  • Ищите каталоги, которые Вы хотели зеркально отразить
  • Создайте новые (реальные) каталоги в new-path
  • Циклично выполните новые каталоги и ищите старые версии файлы, которые Вы хотите, создавая символьные ссылки. Как исходная находка с некоторым увеличением к путям.
  • Начальный оператор очистки должен будет также быть rm -rf new-path/* потому что они - настоящие директора быть осторожными с ним.
2
ответ дан 23 November 2019 в 06:34

Я нашел это:

Cmdfs является виртуальной файловой системой FUSE, которая применяет arbitary команду фильтрации к выбранным файлам в исходном дереве каталогов для создания целевых файлов.

Вот статья об этом: http://www.linux-magazine.com/Online/Features/Cmdfs

И источник на GitHub: https://github.com/mikeswain/cmdfs

3
ответ дан 23 November 2019 в 06:34

Другие вопросы по тегам:

Похожие вопросы: