Tengo un gran directorio "myfiles" lleno de documentos misceláneos y no quiero modificar su estructura.
Por lo tanto, creé (varios) otros directorios para cada clase de documentos. Por ejemplo, tengo un directorio de "imágenes" que tiene enlaces simbólicos a cada uno .jpg
o un .cr2
archivo en el directorio "myfiles" más otros archivos descriptivos para cada enlace simbólico (con el mismo nombre de archivo) con descripción y otros metadatos. Los enlaces simbólicos en el directorio / images pueden tener un nombre diferente del archivo vinculado original.
Estoy tratando de encontrar la forma más sencilla de asegurarme de que todos y cada uno de los archivos de imagen en el directorio "myfiles" tengan un enlace simbólico en el directorio "images".
Vea un ejemplo de la estructura de carpetas
/myfiles/a.doc
/myfiles/b.jpg
/myfiles/c.cr2
/myfiles/d.mov
debería resultar
/images/b_800x600.jpg
/images/b_800x600.desc
/images/c_3820x5640.cr2
/images/c_3820x5640.cr2
fuente
find /myfiles -type f
a en un archivo y luego usarlosfind /images -type l -exec readlink {} \; | egrep myfiles
para obtener una lista de archivos que están enlazados y/images
luego iterar sobre los resultados haciendo unsed
en cada uno para eliminar las rutas en el primer archivo que guarda ya que ya tienen el enlace simbólico y los archivos que quedan son los archivos que no tienen el enlace simbólico.ls -l
puede ver el recuento de enlaces en la segunda columna.rm
esos directorios de enlaces simbólicos y úselos,pax -rwl -s "\|.*regex|modifes_filename|" /path/to/myfiles/*.jpg /path/to/jpg_dir
por ejemplo, para obtener enlaces duros con nombres de archivo alterados programáticamente solo para aquellos archivos que coinciden con sus archivos jpgs. Puede obtener mucho más que eso, como lotes basados en tiempos de cambio, etc.Respuestas:
Si entiendo la pregunta correctamente, necesita archivos en myfiles que no tengan enlaces simbólicos en las imágenes:
Hay una advertencia con este enfoque si tiene el archivo a.jpg en el directorio myfiles / 1 y tiene un enlace simbólico a ese archivo en el directorio images / 3 o simplemente en images / el archivo no se informará con el enlace simbólico faltante.
fuente
Supongo que los archivos debajo
myfiles
no son enlaces simbólicos, y que ninguno de los nombres de archivo contiene nuevas líneas. (Mi enfoque aún puede funcionar si se violan estas suposiciones, pero se vuelve más complicado). También supongo que tiene lareadlink
utilidad común y que es compatible-f
con la canonización de rutas, que es el caso en Linux (tanto GNU como BusyBox), pero no en, por ejemplo, OSX.Cree una lista de archivos y ordénela por si acaso:
Cree una lista de destinos de enlaces simbólicos, con rutas absolutas.
Enumere los archivos que no están vinculados:
Si usa un shell que admite la sustitución de procesos, puede ponerlo todo en un comando:
Si los enlaces debajo
/images
son absolutos, puede usarlosreadlink
sin la-f
opción, que está disponible en * BSD y OSX.fuente
comm
comando, pero no lo haré ahora que veo que ya lo hizo. Sin embargo, la redirección desort
no tiene sentido; entonces las sustituciones del proceso no generarán nada. Además, puede agregar muchos directorios al lado/images
si desea buscar archivos en los/myfiles
que no se vinculen los enlaces simbólicos de cualquiera de varios directorios además/images
.readlink -f