1 votos

obtener los primeros caracteres del parámetro de expansión del comando find

Tengo una enorme colección de imágenes y me gustaría ponerlas en carpetas que coincidan con sus 3 primeros caracteres+extensión.jpg.

Así que me gustaría coger 4_1_0002.png (todos los archivos que empiezan por 4_1) y ponerlo en el 4_1_.jpg carpeta. Del mismo modo, me gustaría coger 4_2_0002.png (todos los archivos que empiezan por 4_2) y ponerlo en el 4_2_.jpg carpeta.

Todos esos archivos que me gustaría ordenar están ahora en una carpeta enorme. Esperaba utilizar un comando find, pero no sé cómo extraer los tres primeros caracteres del parámetro de expansión {}.

find . -type f -ok echo mv {} "path/first3char.jpg" \;

enter image description here

enter image description here

0 votos

Sólo por curiosidad, ¿por qué quieres poner los archivos .png en una carpeta con extensión .jpg, y no en una carpeta con extensión .png?

0 votos

Al principio trabajaba con jpg's, pero luego cambié a pngs. No me molesté en cambiar el nombre

3voto

Suponiendo que todos los archivos están en el mismo directorio y los nombres de los archivos son razonables, algo como

 find . -maxdepth 1 -type f -name '*png' |
     while read line; do
         echo mv "$line" "path/${line:2:3}.jpg/"
     done

Ejecute primero el comando tal y como está escrito (incluyendo el echo ) para comprobar si el resultado tiene sentido. A continuación, elimine el echo y volver a ejecutar.

0 votos

Aunque he votado la respuesta, no obstante añadiría una condición en forma de prueba de que el directorio existe, por ejemplo [[ -d path/${line:2:3}.jpg ]] y usarlo como, por ejemplo, find . -maxdepth 1 -type f -name '*png' | while read line; do [[ -d path/${line:2:3}.jpg ]] && echo mv "$line" "path/${line:2:3}.jpg/"; done . Dicho esto, obviamente si el directorio no existe no moverá el archivo. La razón de la sugerencia es que cada vez que uso un comodín, como por ejemplo '*png' en el find me gusta hacer un código posterior que actúe sobre los resultados de un comodín find condicional.

0 votos

Menciono esto porque como ejemplo, si uno accidentalmente (o intensionalmente) dejó la barra final fuera de "path/${line:2:3}.jpg/" para ser "path/${line:2:3}.jpg ", cambiaría el nombre de un archivo moviéndolo a ${line:2:3}.jpg como un archivo no en un directorio porque el directorio no existía.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X