簡體   English   中英

將“文件名”從文本文件傳遞到命令行,其中文件的每一行都是文件名

[英]Pass “file name” from a text file to a command line where each line of a file is file name

我正在運行以下代碼

git log --pretty=format: --numstat -- SOMEFILENAME |
   perl -ane '$i += ($F[0]-$F[1]); END{print "changed: $i\n"}' \
      >> random.txt

它的作用是獲取一個名稱為“ SOMEFILENAME”的文件,並將添加和刪除的行總數保存到一個名為“ random.txt”的文本文件中

我需要在存儲庫中的每個文件上運行該程序,並且有很多。 有什么簡單的方法可以做到這一點?

如果要每個文件總計:

git log --pretty=format: --numstat |
   perl -ane'
      $c{$F[2]} += $F[0]-$F[1] if $F[2];
      END { print "$_\t$c{$_}\n" for sort keys %c }
   ' >random.txt

如果您想要一個總數:

git log --pretty=format: --numstat |
   perl -ane'
      $c += $F[0]-$F[1];
      END { print "$c\n" }
   ' >random.txt

它們各自的輸出是:

.gitignore      22
Build.PL        48
CHANGES.txt     0
Changes 25
LICENSE 132
LICENSE.txt     0
MANIFEST        18
MANIFEST.SKIP   9
README.txt      67
TODO.txt        1
lib/feature/qw_comments.pm      129
lib/feature/qw_comments.xs      250
t/00_load.t     13
t/01_basic.t    85
t/02_pragma.t   56
t/03_line_numbers.t     37
t/04_errors.t   177
t/05-unicode.t  39
t/devel-pod-coverage.t  26
t/pod.t 17

1151

除了使用find ,您還可以讓git通過使用名稱來為您提供所有文件. (代表當前目錄)。 有了這個,這是一個使用awk的版本,可以打印每個文件的統計信息:

git log --pretty=format: --numstat -- . |
awk '
    NF == 3 {changed[$3] += $1 - $2}
    END { for (name in changed) { printf("%s: %d changed\n", name, changed[name]); } }
'

還有一個更短的代碼,它只打印一條整體更改的行:

git log --pretty=format: --numstat -- . |
awk '
    NF == 3 {changed += $1 - $2}
    END { printf("%d changed\n", changed); }
'

NF == 3是為了說明git似乎在其輸出中打印出虛假的空白行。我沒有試圖弄清楚是否有更好的git命令。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM