Uma combinação simples de mkdir -p
e mv
deve ser suficiente
for f in *; do d="${f:0:2}"; mkdir -p "$d"; mv -t "$d" -- "$f"; done
Demonstrando:
$ ls
0dckGYH5.jpg 32_17pxH.png 32Pz5-WQ.png Hsf4BQW9.jpg xh-fa3Nu.gif zYtBEaKA.png
$ for f in *; do d="${f:0:2}"; mkdir -p "$d"; mv -t "$d" -- "$f"; done
$ tree .
.
├── 0d
│ └── 0dckGYH5.jpg
├── 32
│ ├── 32_17pxH.png
│ └── 32Pz5-WQ.png
├── Hs
│ └── Hsf4BQW9.jpg
├── xh
│ └── xh-fa3Nu.gif
└── zY
└── zYtBEaKA.png
5 directories, 6 files
Se a versão do seu sistema de mkdir
não tiver a opção -p
, você poderá testar explicitamente a existência do diretório, por exemplo,
for f in *; do d="${f:0:2}"; [[ -d "$d" ]] || mkdir "$d"; mv -t "$d" -- "$f"; done