Supondo que seus arquivos armazenados em source dir e suas pastas de destino estejam em dest como a seguinte árvore:
$ tree source
source
├── dir1
│ ├── ABA.xy
│ ├── ACA.xy
│ └── BEB.xy
└── dir2
├── ABA.rr
├── ACA.rr
└── BEB.rr
2 directories, 6 files
$ tree dest
dest
├── ABA
├── ACA
└── BEB
3 directories, 0 files
O comando seria:
find source -type f -exec sh -c 'noext="${0%.*}"; echo mv '{}' "dest/${noext##*/}/"' {} \;
- o
sourceé o diretório de origem ou especifica o diretório pai. -
noext="${0%.*}"retira a extensão dos arquivos e salva o resultado na variávelnoext. -
"${noext##*/}"remove a parte do caminho do arquivo da variávelnoexte seleciona o único nome do arquivo. -
destdirectory é o diretório pai de destino. -
Portanto,
mv '{}' "dest/${noext##*/}/"'move o arquivo atual para o diretóriodest/$noext.O conteúdo de
noextno comando acima é apenas nome do arquivo sem extensão e caminho nele que especifica o diretório de destino que é o mesmo nome do arquivo atual.
Aqui está um exemplo de teste que mostra o resultado do comando
Observe que esses comandos usaram echo para testes e execução a seco. Se você tiver certeza sobre o que é, remova o comando echo na frente de mv para executar a movimentação real.