Eu acho que a solução para o seu problema é chamada substituição de parâmetro (dê uma olhada no descrição detalhada ). Dado o nome de um arquivo em filename
, você obterá sua extensão usando ${filename##*.}
e o nome sem extensão com ${filename%.*}
.
Dito isso, você pode querer modificar o seu loop for
como:
# for all (*) files in the current directory
for i in *;
do
# -f checks if it is a file (skip directories)
[ -f "$i" ] || continue
# store the file name in filename
filename=$(basename $i)
# ext = the extension of the file (here we don't care, jfi)
ext="${filename##*.}"
# dir = the file name without its extension
dir="${filename%.*}"
# create the directory
mkdir -p $dir
# move the file in that directory
mv $i $dir
done
Infelizmente, eu não entendi o ponto da sua bônus tarefa, então isso continuará sendo um desafio aberto ...:)