Files

我如何找到與 .gitignore 等模式對應的所有文件

  • March 25, 2022

舉個例子。我有一個像.myignore. 在該文件中,我有如下字元串:

.vs/
*.suo
*.user
*.log

然後我想找到與 file 中的模式匹配的所有文件.myignore

zsh

() {print -rC1 -- ${(u)@}} ${~^${(f)"$(<.gitignore)"}}(ND)

在哪裡:

  • () {body} args是一個帶有參數的匿名函式呼叫
  • print -rC1 -- ${(u)@}作為函式的主體,在printolumnr上看到1 C它的u唯一參數(u標誌刪除重複項)。如果要刪除這些文件/目錄,請替換為print -rC1rm -rf
  • "$(<.gitignore)"擴展為.gitignore減去尾隨換行符(如果有)的內容。引號是為了防止 IFS 分裂。
  • ${(f)param}``f拆分 line eeds(又名換行符)上的參數擴展。
  • ${~param}啟用對結果詞的通配
  • ${^array}text以類似 rc 或 fish 的方式擴展數組,其中 if $arraycontains AB例如,擴展為Atext Btext而不是A Btext.
  • (ND)添加[N]ullgloband[D]otglob限定符,因此不會跳過隱藏文件並且失敗的匹配不會導致錯誤。

引用自:https://unix.stackexchange.com/questions/696753