Tengo una gran colección de imágenes y me gustaría colocarlas en carpetas que coincidan con sus primeros 3 caracteres + extensión .jpg.
Así que me gustaría agarrar 4_1_0002.png
el archivo (todos los archivos que comienzan con 4_1) y ponerlo en la 4_1_.jpg
carpeta. Del mismo modo, me gustaría tomar 4_2_0002.png
el archivo (todos los archivos que comienzan con 4_2) y ponerlo en la 4_2_.jpg
carpeta.
Todos esos archivos que me gustaría ordenar están ahora en una carpeta enorme. Esperaba usar un comando de búsqueda, pero no sé cómo extraer los primeros tres caracteres del parámetro de expansión {}.
find . -type f -ok echo mv {} "path/first3char.jpg" \;
Suponiendo que todos sus archivos están en el mismo directorio y los nombres de archivo son razonablemente sensatos, algo así como
find . -maxdepth 1 -type f -name '*png' |
while read line; do
echo mv "$line" "path/${line:2:3}.jpg/"
done
Ejecute el comando primero tal como está escrito (incluido el echo
) para verificar si el resultado tiene sentido. A continuación, elimine echo
y vuelva a ejecutar.
[[ -d path/${line:2:3}.jpg ]]
y lo usaría 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. El motivo de la sugerencia es cada vez que uso un comodín, como en, por ejemplo, '*png'
en el find
comando, me gusta hacer código posterior que actuará sobre los resultados de un comodín find
condicional."path/${line:2:3}.jpg/"
que fuera "path/${line:2:3}.jpg
", cambiaría el nombre de un archivo moviéndolo ${line:2:3}.jpg
como un archivo que no está en un directorio porque el directorio no existe .
usuario3439894
san jihan