Regex no está involucrado aquí. Los comodines en bash (como la mayoría de los otros shells) solo coinciden con los archivos según los nombres de los archivos, no según el tipo de archivo u otras características. Hay una manera de hacer coincidir por tipo: agregar /
al final del patrón hace que solo coincida con directorios o enlaces simbólicos a directorios. De esta manera, puede mover directorios, luego mover lo que queda y mover directorios hacia atrás, lo cual es engorroso pero funciona.
tmp=$(TMPDIR=.. mktemp -d)
mv -- */ "$tmp"
mv -- * "$tmp"/other_directory/
mv "$tmp"/* .
rmdir "$tmp"
Una forma estándar de hacer coincidir archivos por tipo es llamar find
.
find . -name . -o -type d -prune -o -exec sh -c 'mv "$@" "$0"' other_directory/ {} +
En zsh, puede usar calificadores globales para unir archivos por tipo. El .
calificador coincide con los archivos normales; use ^/
para hacer coincidir todos los no directorios, o -^/
también para incluir enlaces simbólicos a directorios.
mv -- *(.) other_directory/
En cualquier shell, puedes simplemente hacer un bucle.
for x in *; do
if ! [ -d "$x" ]; then
mv -- "$x" other_directory/
fi
done