web-dev-qa-db-ja.com

mv *フォルダー(「移動できません」エラーを回避)

何千ものファイルを新しいフォルダに移動したいときはいつでも、いつも同じ問題が発生します。

> 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でその構文を使用することもできます。

14
Kevin

新しいサブディレクトリ以外に通常のファイルしかない場合は、次の検索を使用できます。

find . -type f -maxdepth 1 -exec mv {} my_folder \;

-type fオプションは、ファイルのみを検索します(dirsは検索しません)。 -maxdepth 1は、.のみを検索し続けます(他のdirに繰り返されることはありません)。 -exec …があなたの動きをします。

Zshでは、これを次のように省略できます。

mv *(.) my_folder

はい、エラーは無害です。

5
h3rrmiller

あなたが使用することができます:

mv * my_folder 2>/dev/null
0
PersianGulf