2017-02-15 7 views
1

かなり小さいアプリケーションディレクトリをsnippet-appsという1つのディレクトリに移動したかったのです。 git mvを使用したかったのは、削除して作成したのではなく、移動してコミットできるからです。git mv regex?

私はこれをしなかったので、正規表現を使用する方法を見つけ出すことができませんでした:

for dir in *; do 
    if [[ $dir != snippet-apps ]]; 
     then git mv $dir snippet-apps/ ; 
    fi; 
done 

は今、私はCLIとBashで何のマスター午前ませんが、このまたはxargsを使用して、ソリューションであり、それが働いたが、私はgit mv <regex>を望んでいた。

git mv <regex>の使用方法はありますか?または、より簡単なソリューションですか?

+0

エラーはありますか?何が問題ですか? –

+0

Gitはパス名に正規表現を "do"しませんが、この種の '*'は最初の正規表現ではなく、* shell glob *です。つまり、xargsや単純なシェルループを使用すると、とにかくここに行く方法です。 – torek

+2

( 'git mv $(ls | grep -v snippet-apps)snippet-apps /'もうまくいきます。これは 'git mv'は通常の' mv'のように、単一のディレクトリに移動する複数のパスを指定してください。) – torek

答えて

0

"git rm"が提供するものはPathname expansionで、正規表現ではありません。

bashスクリプトを書いて、作業ディレクトリの下で必要なファイルを移動し、 "git add --all"を実行してすべての変更を集めることができます。

+0

git add --allは 'deleted'と表示され、 '名前が変更'されたり移動されたりせずに指示されたように見えます。 - 何か特別なことはありますか? –

0

あなたは、拡張されたグロブ(shopt -s extglobオプションが必要)でそれを行うことができます。

git mv !(snippet-apps)/ snippet-apps/ 

!(pattern)pattern以外のすべてを一致し、及び添付のスラッシュは、我々は唯一のディレクトリと一致を確認します。