Я хочу иметь путь в файловой системе, которая показывает все содержание некоторого другого пути, исключая несколько определенных файлов моего выбора. Например, если следующее уже существует,
original-path
├── file1
├── file2
├── file3
├── file4
├── folder1
│ ├── file1
│ └── file2
└── folder2
├── file1
└── file2
Я хочу смочь исключить /file1
, /folder1/file1
, и /folder2
от нового пути, который иначе указывает на те же данные:
new-path
├── file2
├── file3
├── file4
└── folder1
└── file2
Как я могу выполнить это? Некоторый связывать монтируются, файловая система FUSE или умная схема соединения?
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, но я запустил запрос, чтобы иметь добавленный.
Я думаю, что Вы уже находитесь на правильной странице. Вы упомянули эти две вещи, которые я предложил бы.
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/*
потому что они - настоящие директора быть осторожными с ним.Я нашел это:
Cmdfs является виртуальной файловой системой FUSE, которая применяет arbitary команду фильтрации к выбранным файлам в исходном дереве каталогов для создания целевых файлов.
Вот статья об этом: http://www.linux-magazine.com/Online/Features/Cmdfs
И источник на GitHub: https://github.com/mikeswain/cmdfs