コンピュータ上のすべての空のGitリポジトリを見つけるスクリプト

コンピュータ上のすべての空のGitリポジトリを見つけるスクリプト

.git私たちは空のgitリポジトリにディレクトリだけが含まれていることを知っています。

私はコンピュータ上の空のgitリポジトリをすべて探したいと思います。

私はこのプロセスについて次のように考えました。

  1. 指定されたすべてのディレクトリを検索.git
  2. 内部にある場合は除外します。Trash
  3. 他のリポジトリがあなたのリポジトリではない場合は除外します(一部のサードパーティ製アプリケーションもgitリポジトリをインポートします)。
  4. ループを繰り返す
  5. 各リポジトリの親ディレクトリの最上位ファイルとフォルダの数を計算します。
  6. 数が0(除外.git)または1(含む.git)の場合、リポジトリは空です。echoそれ。

これは私のスクリプトです。

find / -type d -name .git 2>/dev/null | 
{
    while read gitFolder; do
        if [[ $gitFolder == *"/Temp/"* ]]; then
            continue;
        fi
        if [[ $gitFolder == *"/Trash/"* ]]; then
            continue;
        fi
        if [[ $gitFolder == *"/opt/"* ]]; then
            continue;
        fi
        parent=$(dirname $gitFolder);
        echo "";
        if [ $(ls $parent -A | wc -l ) != 1 ]; then
            echo $parent
        fi
    done
}

しかし、これは期待どおりに機能しませんでした。すべてのリポジトリが一覧表示されます。これは、比較セクションにエラーがありますが見つかりません。私は何が間違っていましたか?

また、これが最善のアプローチではないかもしれないと思います。より良くする方法についてのアイデアはありますか?

ベストアンサー1

これは比較がうまくいかない理由を説明しませんが、出力を繰り返すことなくfindこれらすべてを直接実行できます(findサポートしている場合)。-execdir

find / -type d \( \( \( -name Temp -o -name Trash -o -name opt \) -prune \) \
                  -o \( -name .git -execdir sh -c '[ "$(ls -A)" = ".git" ] && pwd' \; \) \)

これはすべてのディレクトリ、prunesなどを探します。Tempしたがって、サブディレクトリもナビゲートしません。というディレクトリが見つかったら、.git親ディレクトリでテストを実行し、.gitそのファイルが存在する唯一のファイルであることを確認し、そうであればpwd現在のディレクトリを印刷します。

おすすめ記事