Faça um backup primeiro, claro!
for i in $(find . -maxdepth 1 -type f -iname "*.pdf" -exec basename "{}" .pdf \;); \
do mkdir $i; \
mv $i.pdf $i; \
done
O find
apenas obtém os arquivos (-f) do diretório atual (-maxdepth 1), que são chamados de qualquer coisa que termine com ".pdf" ignorando o caso de letras. Em seguida, ele pega a parte do nome do arquivo antes de .pdf (basename) e mantém isso em uma variável.
Em seguida, cria um diretório ( mkdir
) usando essa variável, portanto, um arquivo "AdobeFile.pdf" criará um diretório "AdobeFile" e, em seguida, move ( mv
) o arquivo para o diretório.
Eu recomendo copiar um subconjunto de arquivos para um diretório temporário, operando sobre eles, verificando os arquivos indo para onde você quiser e então executando no conjunto completo.
Eu não testei o tratamento adequado de nomes de arquivos com espaços ou. neles, nem com personagens estranhos (como UTF8).