J'ai un grand répertoire "myfiles" plein de documents divers et je ne souhaite pas modifier sa structure.
J'ai donc créé (plusieurs) autres répertoires pour chaque classe de documents. Par exemple, j'ai un répertoire "images" qui a des liens symboliques vers chacun .jpg
ou un .cr2
fichier dans le répertoire "myfiles" ainsi que d'autres fichiers descriptifs pour chaque lien symbolique (avec le même nom de fichier) avec description et autres métadonnées. Les liens symboliques dans le répertoire / images peuvent avoir un nom différent du fichier lié d'origine.
J'essaie de trouver le moyen le plus simple de m'assurer que chaque fichier image du répertoire "myfiles" possède un lien symbolique vers le répertoire "images".
Voir un exemple de la structure des dossiers
/myfiles/a.doc
/myfiles/b.jpg
/myfiles/c.cr2
/myfiles/d.mov
devrait résulter
/images/b_800x600.jpg
/images/b_800x600.desc
/images/c_3820x5640.cr2
/images/c_3820x5640.cr2
la source
find /myfiles -type f
dans un fichier, puis utiliserfind /images -type l -exec readlink {} \; | egrep myfiles
pour obtenir une liste de fichiers qui sont liés par des liens symboliques,/images
puis parcourir les résultats en faisant unsed
sur chacun pour supprimer les chemins d'accès dans le premier fichier que vous enregistrez car ils ont déjà avoir le lien symbolique et les fichiers restants sont les fichiers qui n'ont pas le lien symbolique.ls -l
vous pouvez voir le nombre de liens physiques dans la deuxième colonne.rm
ces répertoires de liens symboliques et utiliserpax -rwl -s "\|.*regex|modifes_filename|" /path/to/myfiles/*.jpg /path/to/jpg_dir
par exemple pour obtenir des liens physiques avec des noms de fichiers modifiés par programme pour uniquement ceux qui correspondent à vos fichiers jpgs. Vous pouvez en tirer beaucoup plus que cela - comme le traitement par lots basé sur les temps de changement, etc.Réponses:
Si je comprends mal la question, vous avez besoin de fichiers dans mes fichiers qui n'ont pas de liens symboliques dans les images:
Il y a une mise en garde avec cette approche si vous avez un fichier a.jpg dans le répertoire myfiles / 1 et que vous avez un lien symbolique vers ce fichier dans le répertoire images / 3 ou simplement dans images / le fichier ne sera pas signalé avec un lien symbolique manquant.
la source
Je suppose que les fichiers sous
myfiles
ne sont pas des liens symboliques et qu'aucun des noms de fichiers ne contient de nouvelles lignes. (Mon approche peut toujours fonctionner si ces hypothèses sont violées mais cela devient plus compliqué.) Je suppose également que vous avez l'readlink
utilitaire commun et qu'il prend-f
en charge la canonisation des chemins, ce qui est le cas sous Linux (GNU et BusyBox), mais pas par exemple sur OSX.Créez une liste de fichiers et triez-la pour faire bonne mesure:
Construisez une liste de cibles de liens symboliques, avec des chemins absolus.
Répertoriez les fichiers qui ne sont pas liés:
Si vous utilisez un shell qui prend en charge la substitution de processus, vous pouvez tout mettre dans une seule commande:
Si les liens sous
/images
sont absolus, vous pouvez utiliserreadlink
sans l'-f
option, qui est disponible sous * BSD et OSX.la source
comm
commande, mais je ne le ferai pas maintenant que je vois que vous l'avez déjà fait. Cependant, la redirection depuissort
n'a aucun sens; alors les substitutions de processus ne produiront rien. En outre, vous pouvez ajouter de nombreux répertoires à côté/images
si vous souhaitez rechercher des fichiers dans/myfiles
lesquels ils ne sont pas liés par des liens symboliques à partir d'un certain nombre de répertoires/images
.readlink -f