Tengo una gran colección de imágenes y me gustaría ponerlas en carpetas que coincidan con sus primeros 3 caracteres + extensión .jpg.
Entonces me gustaría tomar el 4_1_0002.png
archivo (todos los archivos que comienzan con 4_1) y ponerlo en la 4_1_.jpg
carpeta. Del mismo modo, me gustaría tomar el 4_2_0002.png
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 ahora están 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" \;
Respuestas:
Asumiendo que todos sus archivos están en el mismo directorio y los nombres de los archivos son razonables, algo así como
Ejecute el comando primero como está escrito (incluido el
echo
) para verificar si el resultado tiene sentido. Luego quite elecho
y vuelva a ejecutar.fuente
[[ -d path/${line:2:3}.jpg ]]
y lo uso 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 que cada vez que utilizo un comodín, como en, por ejemplo,'*png'
en elfind
comando, me gusta hacer un código posterior que actúe sobre los resultados de un comodínfind
condicional."path/${line:2:3}.jpg/"
para que sea"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 existía .