2015-10-07 63 views

答えて

1

私は、これはあなたがやっている無効な操作だと思います。

現在のディレクトリ(pwd).を現在のディレクトリの内側にある別のディレクトリに移動することはできません。たとえmvコマンドが機能しません。出力は、GitのMVに*使用

mv: cannot move ‘.’ to ‘someDir/.’: Device or resource busy 

を言うようにも

git mv * someDir 
fatal: can not move directory into itself, source=curDir, destination=curDir/someDir 

を言う1つのディレクトリレベルを移動し、目的のディレクトリに移動するディレクトリを選択します。この場合でもあなたは、子ディレクトリ内で移動する親ディレクトリを作成することはできません。親ディレクトリの内容/ファイルは、親ディレクトリ自体ではなくターゲットディレクトリに移動することができます。

+0

私の答えを見る方法これはエラーを抑制することなく拡張グローブを使用します。 – featherbelly

11

私はこのエラーメッセージを偶然見つけました。明らかに解決策は非常に簡単です。

まず、mvgit moveがあることを覚えておいてください。
通常のbash移動の使用法は、mv * ./subDirです。これにより、警告が生成されますが、ファイルは移動されます。移動致命的なエラーを生成し、中止します用法git mv * ./subDirgit mv一方


fatal: can not move directory into itself, source=currentDir/subDir, destination=currentDir/subDir/subDir

git mv作品を作るための解決策は単純です:
git mv -k * ./subDir option -k単純にすべてのアクションをスキップすることエラーが発生します。

+2

これで '-k'を適用し、ファイルの移動をスキップします。それはどのように役立つのですか? – LuxDie

+1

mvコマンドは、ディレクトリを自分自身に移動しようとするため、常に失敗します。このため、操作は無限ループになるため、エラーが発生し、何も移動しません。しかし、-kオプションを指定すると、失敗することはなく、無限ループで終了することもありません。 – Julian

+4

はい、実際には何もしません。試しました。 – LuxDie

0

正規表現を使用できるように、Extended Globbingを有効にする必要があります。

グロブをフィーチャーしたコマンドを実行する前に入力し、このコマンド:

$ shopt -s extglob 

(あなたはこのを毎回入力したくない場合は、あなたもあなたの~/.bash_profileにこれを追加することができます)

その後のことができます。

:これはあなたのフォルダ構造であれば例えば

$ git mv ./!(exclude_me|exclude_me) ./destination_folder 

次の構文を使用します。

root 
├── aardvark 
├── contrib 
| ├── folder1 
| └── folder2 
├── custom 
| ├── folder1 
| └── folder2 
├── elephant 
├── hippopotamus 
└── zebra 

そして、あなたはrootディレクトリで次のコマンドを実行します。

$ shopt -s extglob 
$ git mv ./!(custom|contrib) ./contrib 

あなたはこれで終わるだろう:

root 
├── contrib 
| ├── aardvark 
| ├── elephant 
| ├── folder1 
| ├── folder2 
| ├── hippopotamus 
| └── zebra 
└── custom 
    ├── folder1 
    └── folder2 

-nフラグを追加しますが、テストの実行をしたいされており、コマンドがエラーなしで実行されることを確認してください:

$ git mv -n ./!(exclude_me|exclude_me) ./destination_folder 
関連する問題