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ávelnoext
e seleciona o único nome do arquivo. -
dest
directory é o diretório pai de destino. -
Portanto,
mv '{}' "dest/${noext##*/}/"'
move o arquivo atual para o diretóriodest/$noext
.O conteúdo de
noext
no 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.