Regex não está envolvido aqui. Os curingas no bash (como a maioria dos outros shells) correspondem apenas aos arquivos com base nos nomes dos arquivos, não no tipo de arquivo ou em outras características. Há uma maneira de corresponder por tipo: adicionar /
no final do padrão faz corresponder apenas diretórios ou links simbólicos aos diretórios. Dessa forma, você pode mover diretórios, depois mover o que resta e mover diretórios de volta - pesado, mas funciona.
tmp=$(TMPDIR=.. mktemp -d)
mv -- */ "$tmp"
mv -- * "$tmp"/other_directory/
mv "$tmp"/* .
rmdir "$tmp"
Uma maneira padrão de corresponder arquivos por tipo é ligar find
.
find . -name . -o -type d -prune -o -exec sh -c 'mv "$@" "$0"' other_directory/ {} +
No zsh, você pode usar os qualificadores glob para corresponder aos arquivos por tipo. O .
qualificador corresponde aos arquivos regulares; use ^/
para corresponder a todos os não diretórios ou -^/
também para incluir links simbólicos para diretórios.
mv -- *(.) other_directory/
Em qualquer shell, você pode simplesmente fazer um loop.
for x in *; do
if ! [ -d "$x" ]; then
mv -- "$x" other_directory/
fi
done