Je veux avoir un chemin dans le système de fichiers qui montre le contenu entier d'un autre chemin, à l'exception de certains fichiers de mon choix. Par exemple, si ce qui suit existe déjà,
original-path
├── file1
├── file2
├── file3
├── file4
├── folder1
│ ├── file1
│ └── file2
└── folder2
├── file1
└── file2
Je veux pouvoir exclure /file1
, /folder1/file1
et /folder2
d'un nouveau chemin qui renvoie par ailleurs aux mêmes données:
new-path
├── file2
├── file3
├── file4
└── folder1
└── file2
Comment puis-je accomplir cela? Une sorte de montage de liaison, de système de fichiers Fuse ou de schéma de liaison intelligent?
rofs-filter , un système de fichiers Fuse dérivé de système de fichiers en lecture seule , peut exclure des fichiers à l'aide d'expressions régulières:
$ 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-filter n'est pas disponible dans les dépôts d'Ubuntu, mais j'ai lancé un demande de l'ajout .
J'ai trouvé ça:
Cmdfs est un système de fichiers virtuel Fuse qui applique une commande de filtre arbitraire aux fichiers sélectionnés dans une arborescence de répertoires source afin de créer les fichiers de destination.
Voici un article à ce sujet: http://www.linux-magazine.com/Online/Features/Cmdfs
Et la source sur github: https://github.com/mikeswain/cmdfs
Je pense que vous êtes déjà sur la bonne page. Vous avez mentionné les deux choses que j'aurais suggérées.
Fuse est apparemment assez simple à prendre. J'ai eu une question similaire à celle-ci il y a quelque temps et l'une des réponses a mentionné Fuse. J'ai trouvé une option plus simple (que j'expliquerai dans une seconde), mais si cela n'est pas souhaitable, Fuse pourrait valoir la peine d'être étudié.
Mon problème était que j'ai un répertoire entrant où les clients jettent toutes sortes de conneries. J'avais besoin d'un moyen pour être autorisé à les trier dans des répertoires profonds (par exemple, /work/client-name/project/document.ext
), mais j'ai toujours une compréhension au plus haut niveau pour voir ce qui était nouveau. J'ai écrit un petit script bash qui maintenait un répertoire "récent" contenant des liens symboliques vers le contenu récent.
Quelque chose d'aussi simple que cela pourrait fonctionner pour vous. Continuez simplement à vous enchaîner sur les arguments -not -name
, ou filtrez positivement si vous avez quelque chose que vous pouvez rechercher ...
#!/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/ {} +
Ceci est seulement le premier niveau mais vous pouvez l’étendre à:
new-path
rm -rf new-path/*
, car ce sont de vrais répertoires. Faites attention avec ça.