O 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 com base no tipo de arquivo ou em outras características. Há uma maneira de combinar por tipo: adicionar /
no final do padrão faz com que ele corresponda apenas a diretórios ou links simbólicos a diretórios. Dessa forma, você pode mover diretórios, depois mover o que sobrou e mover diretórios de volta - complicado, 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 é chamar find
.
find . -name . -o -type d -prune -o -exec sh -c 'mv "$@" "$0"' other_directory/ {} +
No zsh, você pode usar os qualificadores para corresponder os arquivos por tipo. O qualificador .
corresponde a arquivos regulares; use ^/
para corresponder a todos os não diretórios ou -^/
para incluir também 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