você pode listar seus arquivos na lista de ls > list
, por exemplo,
em seguida, use uma leitura de loop para criar subpastas & então mova os arquivos despachando-os no bom de seu nome como um filtro padrão.
aqui fiz um teste a partir de arquivos vazios touch filename
para demonstrar o método
bash-4.4$ while read
> do
> if [ ! -d ${REPLY/_*/} ]; then
> mkdir ${REPLY/_*/}
> fi
> done < list
bash-4.4$ #here directories are made then use similar method for moving files
bash-4.4$ while read; do if [ -f $REPLY ] ; then mv $REPLY ${REPLY/_*/}/${REPLY/*_/} ; fi ; done < list
bash-4.4$ tree
.
├── identifier
│ └── desiredName.m
├── identifier1
│ ├── desirename1.m
│ └── desirename.m
├── identifier2
│ └── desirename2.m
└── list
3 directories, 5 files
bash-4.4$ 5~
Você pode fazer uso direto no shell ou usar uma sintaxe semelhante em um script, é claro.