何千ものファイルを新しいフォルダに移動したいときはいつでも、いつも同じ問題が発生します。
> mkdir my_folder
> mv * my_folder
mv: cannot move 'my_folder to a subdirectory of itself 'my_folder'
上記のエラーは無害だと思いますが(そうですか?)それを回避する方法があるかどうか疑問に思っています。
重要な場合は、zshのソリューション、またはさまざまなシェルでうまく機能するソリューションに興味があります。
Zshでは、extended_glob
オプションを有効にすると、~
を使用してグロブからパターンを除外できるため、次のように使用できます。
setopt extended_glob
mv -- *~my_folder my_folder
または、否定演算子を使用します(まだextended_glob
を使用):
mv -- ^my_folder my_folder
ディレクトリ名を2回入力しないように、中括弧を使用します。
mv -- {^,}my_folder
Bash(それを使用している他の回答を求める人向け)では、Kshスタイルの拡張グロブを使用できます。
# If it's not already enabled
shopt -s extglob
mv -- !(my_folder) my_folder
ksh_glob
オプションを有効にすると、zsh
でその構文を使用することもできます。
新しいサブディレクトリ以外に通常のファイルしかない場合は、次の検索を使用できます。
find . -type f -maxdepth 1 -exec mv {} my_folder \;
-type f
オプションは、ファイルのみを検索します(dirsは検索しません)。 -maxdepth 1
は、.
のみを検索し続けます(他のdirに繰り返されることはありません)。 -exec …
があなたの動きをします。
Zshでは、これを次のように省略できます。
mv *(.) my_folder
はい、エラーは無害です。
あなたが使用することができます:
mv * my_folder 2>/dev/null