Script para reconocer el nombre del archivo hasta el símbolo "-" y crear una carpeta con el mismo nombre, mover todos los archivos a esa carpeta

Script para reconocer el nombre del archivo hasta el símbolo "-" y crear una carpeta con el mismo nombre, mover todos los archivos a esa carpeta

tengo esto

/Folder1/108462-2.jpg
/Folder1/108462-3.jpg
/Folder1/BSR2333-1.jpg
/Folder1/BSR2333-2.jpg
/Folder1/DKS23108554-1.jpg
/Folder1/DKS23108554-2.jpg

Me gustaría tener esto:

/108462/108462-2.jpg
/108462/108462-3.jpg
/BSR2333/BSR2333-1.jpg
/BSR2333/BSR2333-2.jpg
/DKS23108554/DKS23108554-1.jpg
/DKS23108554/DKS23108554-2.jpg

He visto esto;

do if [[ -f "$file" ]]; then mkdir "${file:0:9}" mv "$file" "${file:0:9}"; fi; done 

pero no lo logra del todo...

Pero cómo solucionarlo para usar el nombre completo hasta "-" para crear una carpeta y colocar archivos en esa carpeta. Gracias de antemano, muy nuevo en la terminal mac.

Respuesta1

Según la descripción, desea cambiar el inicio /Folder1para que sea el nombre del archivo en la carpeta hasta el -nombre del archivo.

Este es un ejemplo primitivo connombres de variables significativospara código legible.

#! /bin/bash

pathname=/Folder1/108462-2.jpg
newfolder="$(dirname "$pathname")"
newfolder="${newfolder/-.*$//}"
filenamepartofpathname="$(basename $pathname)"
newpathname="$newfolder/$filenamepartofpathname"
echo "$newpathname"

chequeo de conchano produce salida:

$ shellcheck primitive-example.sh
(no output)
$ ./primitive-example.sh
/108462/108462-2.jpg

Tenga en cuenta que si el archivo tiene más de uno, -es posible que deba ajustar el ejemplo primitivo.

También puedes probar el "code golf"https://codegolf.stackexchange.com/para obtener ayuda para hacerlo menos primitivo pero menos legible.

información relacionada