Lectura de un fichero para usar su contenido como parámetro para otros comandos.

Leyendo el fichero que se indica como entrada en <soloNombres.txt:

Para cada línea la muestra en pantalla.

while read p; do echo “$p”; done <soloNombres.txt

Podemos completar el comando con un condicional del tipo, si existe el fichero haz…. Para ello reemplazamos el do echo$ del ejemplo anterior por la prueba de si existe o no un fichero.

if [ -f “nombre.CR2” ]; then echo “nombre.CR2”;fi;

El condicional if comprueba si [-f “nombre.CR2”] existe (verdadero) y en dicho caso ejecuta el “echo”

Si lo combinamos con el comando anterior y en lugar del “nombre.CR2” comprobamos si existe cada línea del fichero terminada en .CR2

while read p; do if [ -f “$p.CR2” ]; then echo “$p”;fi; done <soloNombres.txt

La ejecución imprimirá una línea por cada línea del fichero soloNombres.txt que exista en el directorio actual con la extensión .CR2

El condicional podemos completarlo para que haga más cosas, por ejemplo mover un fichero cuyo nombre coincida con la línea del fichero y que se encuentre en otra ruta al local y tenga extensión jpg al directorio actual y borre el fichero del directorio actual con extensión CR2

while read p; do if [ -f “/drives/z/otra/ruta/$p.jpg” ]; then cp “/drives/z/otra/ruta/$p.jpg” .; rm “$p.CR2”;fi; done <soloNombres.txt

En mi caso par construir el fichero soloNombres.txt he usado dos comandos en el directorio actual (donde se encuentran los CR2)

Para sacar la relación de los ficheros CR2, cada línea quedará como nombre.cr2

xxxxx.cr2

ls -lha *.cr2 |awk ‘{print $9}’ >cr2.txt

Para quedarme solamente con el nombre del fichero, sin la extensión:

cat cr2.txt |awk -F “.” ‘{print $1}’>soloNombres.txt