ワイルドカードを使用してディレクトリ以外のファイルのみを一致させるにはどうすればよいですか?

ワイルドカードを使用してディレクトリ以外のファイルのみを一致させるにはどうすればよいですか?

というファイルがありますhome/homeLife

/home に home1 home2 および home3 というファイルが保存されています。

で始まるすべてのファイルをhome*移動したいですhome/homeLife/.

私は入った

mv home* /home/homeLife
cannot move homeLife into subdirectory of itself

私の質問:ディレクトリをどのように除外しますか?

答え1

zshglob修飾子を使用してください。

mv home*(.) dst 

移動のみ定期的な文書。

しかし、

mv home*(^/) dst 

あらゆる種類のファイルの移動とは別に目次。

mv home*(^-/) dst

ディレクトリへのシンボリックリンクも除外されます。

答え2

検索をご利用ください。次は動作します。

find . -name home\* -type f -maxdepth 1 -exec mv {} /home/homeLife/. \;

答え3

Bashを使用してglobを拡張できます。

shopt -s extglob                ## activate extglogs if not yet done
mv  home!(*Life) homeLife/      ## !(p1|...) = anything except one of the patt

答え4

グローバルマッチリストを簡単に整理できます。

set --; cd /home
for f in ./home*
do  [ ! -L "$f" ] && 
      [ -f "$f" ] && 
      set "$@" "$f"
done
[ "$#" -eq 0 ] || mv "$@" ./homeLife

関連情報