找到幾個目錄之間的公共文件集?

找到幾個目錄之間的公共文件集?

我正在尋找比較 Drupal 主題的目錄。 drupal 主題是一個由多個檔案組成的目錄,我試圖找出哪些是必不可少的。例如,它們可能都有一個名為template.php或 的檔案page.tpl.php

如何找到多個目錄的所有公共文件集?就我而言,所有「相同」檔案(同名的檔案)都將位於同一層級目錄中。

答案1

列出所有目錄共有的檔案的所有名稱(不是路徑)。

dirs=( "A dir" "B dir" "C dir" "D dir" )
find "${dirs[@]}" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *${#dirs[@]} //p"

或將其作為腳本文件或函數調用,並以目錄作為參數。

find "$@" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *$# //p"

答案2

您可以顯示按名稱出現的目錄數排序的名稱清單。

find */ |              # traverse all the template directories
sort -t / -k 2 |       # sort, ignoring the first field
tr '/' '\t' |          # turn / into tabs
uniq -f 1 -c |         # count duplicates, ignoring the first field
tr '\t' '/' |          # turn tabs back into /
sort -t / -s -k 1n     # sort by the number of occurrences

答案3

梅爾德您可以比較兩個目錄,並查看其中一個目錄中存在哪些文件,另一個目錄中不存在哪些文件,反之亦然。它還可以顯示常見文件之間的差異。

答案4

對於 3 個目錄,其中一個是當前目錄,以及兩個“a”和“b”,您可以像這樣連結測試:

ls a/$(ls b/$(ls *.php) 2>/dev/null) 2>/dev/null

如果檔案具有通用模式(如 .php)且檔案名稱中不包含空格。

在腳本中使用ls總是有問題的,我通常不鼓勵使用它,但是如果您對搜尋開始的目錄中的所有檔案有一個概述,並且它不包含空格,也不包含“*”或“?”等特殊字符, "、"<"或"|",需要保存才能使用。

相關內容