Regex тут не бере участь. Замісні знаки в баші (як і більшість інших оболонок) відповідають файлам лише на основі імен файлів, а не на основі типу файлу чи інших характеристик. Існує один спосіб зіставлення за типом: додавання/
в кінці шаблону дозволяє лише відповідати каталогів або символічним посиланням на каталоги. Таким чином, ви можете переміщувати каталоги, потім переміщувати те, що залишилося, і переміщувати каталоги назад - громіздко, але це працює.
tmp=$(TMPDIR=.. mktemp -d)
mv -- */ "$tmp"
mv -- * "$tmp"/other_directory/
mv "$tmp"/* .
rmdir "$tmp"
Стандартний спосіб зіставлення файлів за типом - дзвінок find
.
find . -name . -o -type d -prune -o -exec sh -c 'mv "$@" "$0"' other_directory/ {} +
У zsh ви можете використовувати глобальні класифікатори для відповідності файлів за типом. .
Відбіркові матчі регулярних файлів; використовувати ^/
для узгодження всіх не-каталогів, або-^/
для включення символьних посилань на каталоги.
mv -- *(.) other_directory/
У будь-якій оболонці, ви можете просто петлю.
for x in *; do
if ! [ -d "$x" ]; then
mv -- "$x" other_directory/
fi
done