ここでは正規表現は関係しません。bashのワイルドカード(他のほとんどのシェルと同様)は、ファイルの種類やその他の特性ではなく、ファイル名に基づいてファイルにのみ一致します。タイプ別に一致させる方法が1つあります。/
パターンの最後に追加すると、ディレクトリまたはディレクトリへのシンボリックリンクのみが一致します。この方法では、ディレクトリを移動してから、残っているものを移動し、ディレクトリを戻すことができます-面倒ですが動作します。
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では、glob修飾子を使用してファイルをタイプ別に一致させることができます。.
修飾子は、通常のファイルにマッチします。^/
すべての非ディレクトリと一致させるため、またはディレクトリ-^/
へのシンボリックリンクを含めるために使用します。
mv -- *(.) other_directory/
どのシェルでも、単純にループできます。
for x in *; do
if ! [ -d "$x" ]; then
mv -- "$x" other_directory/
fi
done