あやみつさんの覚書き

メモや覚書きなど

git ls-fileで抽出したファイルを別フォルダに階層を維持してコピー

背景

「.gitignoreで除外後のファイル一覧を抽出したいな……」「コミットして別フォルダでチェックアウトすればいいかもしれない」「もうちょっとこう、楽したい」「なんか-Recurseでやってもフラットにコピーされるな……ファイル指定だからか」

前提

  • コマンド実行時のカレントディレクトリはプロジェクトフォルダ内(git ls-filesするので)
  • gitでファイルがコミット済みであること(git ls-filesで一覧を取得するので)
  • PowerShell (PSVersion:5.1.22621.2506)

コマンド

# コピー先パス、パスを結合するので末尾は'\'にすること
$target="..\copy_dest\"

git ls-files | % {
    $dest = $target + $_
    $destDir=Split-Path $dest

    # フォルダがなければ作成
    if (!(Test-Path $destDir))
    {
        mkdir $destDir
    }
    Copy-Item $_ -Destination $dest -Force
}