Regex burada yer almıyor. Bash içindeki joker karakterler (diğer kabukların çoğu gibi), dosya türüne veya diğer özelliklere göre değil, yalnızca dosya adlarına göre dosyaları eşleştirir. Türe göre eşleşmenin bir yolu vardır: /
desenin sonuna eklemek , onu sadece dizinlerle veya dizinlere sembolik bağlantılarla eşleştirir. Bu şekilde, dizinleri taşıyabilir, sonra kalanları taşıyabilir ve dizinleri geri taşıyabilirsiniz - hantal ama işe yarıyor.
tmp=$(TMPDIR=.. mktemp -d)
mv -- */ "$tmp"
mv -- * "$tmp"/other_directory/
mv "$tmp"/* .
rmdir "$tmp"
Dosyaları türe göre eşleştirmenin standart bir yolu aramaktır find
.
find . -name . -o -type d -prune -o -exec sh -c 'mv "$@" "$0"' other_directory/ {} +
Zsh'de, dosyaları türe göre eşleştirmek için glob niteleyicileri kullanabilirsiniz . .
Niteleyici düzenli dosyaları eşleşir; kullanmak ^/
veya olmayan tüm dizinleri maç için -^/
de dizinlere sembolik bağlantılarını verme.
mv -- *(.) other_directory/
Herhangi bir kabukta, basitçe döngü yapabilirsiniz.
for x in *; do
if ! [ -d "$x" ]; then
mv -- "$x" other_directory/
fi
done