1

$dir、すべてのファイル/ディレクトリの概要を(再帰的に)取得したいのですが、

  • に含まれるすべてのファイル/ディレクトリを除外します$list($list が改行で区切られていると仮定します)
  • $listその下のツリー全体ではなく、含まれていない最上位のディレクトリのみを含めます

私は現在使用しています:

cd $dir && git init && echo "$list" > .gitignore && git status && rm -rf .git .gitignore

これは単純で、「追跡されていないファイル」のリストは私が必要としているものですが、tmp git リポジトリの不要なファイルシステム I/O を大量に実行し、ファイルを無視するため、実際にはクリーンではありません。

findまた、剪定アクションなどについて熟考してきましempty=$(mktemp -d) && rsync -nv --exclude-from=$list $dir/ $emptyたが、それらは私が望むようには機能しません。

これをどのように実装しますか?これを行う既存の shell/python/... ツールはありますか? または、実際に一時的な git リポジトリ (または別の vcs ツール?) を作成せずに、どうにかして git コードを再利用できますか?

4

1 に答える 1

1

簡潔な1ライナー形式について事前にお詫びします(この方法でテストする方が簡単でした)

for FILE in `find .`; do eval "case \"$FILE\" in "$list");;*)echo \"$FILE\";;esac";done

リストの形式は「./path/to/file|dir|dir/*|*allfilesmatchingthis*|*.git...」になります。

エコーを「ステータス」タイプのコマンドに置き換えます

于 2012-02-23T16:20:43.873 に答える