Regex tidak terlibat di sini. Wildcard di bash (seperti kebanyakan shell lainnya) hanya cocok dengan file berdasarkan nama file, bukan berdasarkan tipe file atau karakteristik lainnya. Ada satu cara untuk mencocokkan berdasarkan jenis: menambahkan /
di akhir pola membuatnya hanya cocok dengan direktori atau tautan simbolik ke direktori. Dengan cara ini, Anda dapat memindahkan direktori, lalu memindahkan apa yang tersisa, dan memindahkan direktori kembali - rumit tetapi berfungsi.
tmp=$(TMPDIR=.. mktemp -d)
mv -- */ "$tmp"
mv -- * "$tmp"/other_directory/
mv "$tmp"/* .
rmdir "$tmp"
Cara standar untuk mencocokkan file berdasarkan jenis adalah dengan menelepon find
.
find . -name . -o -type d -prune -o -exec sh -c 'mv "$@" "$0"' other_directory/ {} +
Di zsh, Anda dapat menggunakan kualifikasi glob untuk mencocokkan file berdasarkan jenis. The .
kualifikasi sesuai file biasa; gunakan ^/
untuk mencocokkan semua non-direktori, atau -^/
juga untuk menyertakan tautan simbolik ke direktori.
mv -- *(.) other_directory/
Dalam shell apa pun, Anda cukup loop.
for x in *; do
if ! [ -d "$x" ]; then
mv -- "$x" other_directory/
fi
done