Atticというサブフォルダのみを含むフォルダの一覧表示

Atticというサブフォルダのみを含むフォルダの一覧表示

Gitに移行する前にCVSリポジトリをクリーンアップしています。準備の一環として、Atticフォルダのみを含むフォルダを見つけて削除する必要があります。

私のunix-fuは強力ではありませんが、これは私が試したものであり、うまくいきませんが、うまくいけば意図が伝わることを願っています。

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    if [`ls | wc -l` == 1 && `ls Attic | wc -l` == 1]; then
      ((echo Attic-only folder))
    fi
  fi
done

2番目の部分は、空のフォルダ(またはフォルダチェーン)を見つけることです。

たとえば、/foo/bar/Attic削除され/foo/bar、すべてが空の場合、ツリーの対応する部分も終了します。

背景:Gitに移行するためにCVSリポジトリをクリーンアップしようとしています。 CVSはAttic削除されたファイル用のフォルダを作成します。過去10年間でいくつかの悪いことが起こりました。私はリスクと影響を完全に理解しています。データをバックアップしてコピーを作成しています。

ベストアンサー1

AND bash、GNU findAND comm

comm -12 \
    <( find /path/to/CVS/repo -printf '%h\n' \
        sort | uniq -u ) \
    <( find /path/to/CVS/repo -name Attic -type d -printf '%h\n' | \
        sort )

最初のs()は、findリポジトリのすべての内容、ファイル、およびディレクトリを印刷します basename。次に、子、ファイル、またはディレクトリが1つしかないディレクトリを印刷します。-printf '%h\n'sort | uniq -u

次に2番目はfindディレクトリbasenameのsを印刷しますAttic。このセットと上記のセット(例comm -12)の交点は、まさにサブエントリのみを持つディレクトリですAttic

もちろん、これはシンボリックリンクやその他の面白いもの、改行文字を含むファイル名も無視します。いずれにせよ、CVSリポジトリに入れないでください。

おすすめ記事