Um loop ligeiramente modificado:
for pattern in S1 S2 S3 S4; do
mkdir -p ./"$pattern"
for filename in ./*"$pattern"*; do
[ ! -f "$filename" ] && continue
mv -i "$filename" "$pattern"/
done
done
Isso percorre as strings de padrão S1
, S2
, S3
e S4
. O loop interno usa a string de padrão atual para procurar nomes no diretório atual que contém a sequência de caracteres em qualquer lugar. Ele ignora arquivos não regulares (como os próprios diretórios S1
, S2
etc.) e move todo o restante que corresponde ao diretório apropriado para essa sequência padrão.
Como o slm aponta nos comentários (agora excluídos), as operações no loop interno podem, nesse caso, ser bem encurtadas em apenas
[ ! -f "$filename" ] || mv -i "$filename" "$pattern"/
ou
[ -f "$filename" ] && mv -i "$filename" "$pattern"/
Se você tiver padrões sobrepostos, como S1
e S11
, será necessário fazer os padrões mais longos primeiro.