找到類似名稱的文件

找到類似名稱的文件

我運行的是 OS X 10.7.3。我想找到文件名中具有公共字串的所有文件。

我有一個資料夾,其中包含多個文件,其文件名稱除前綴外均相同。例如:

003 - 日食.mp3
008 - 美麗的一天.mp3
027 - 日食.mp3
103 - 起伏的丘陵.mp3
244 - 連綿起伏的丘陵.mp3

我想從該列表中過濾掉任何具有“完全唯一”名稱的實體,在本例中:008 - Beautiful Day.mp3

是否有 GUI 用戶端、自動化腳本或終端命令可以執行此操作?

多謝!

答案1

ls | cut -b 6- | sort | uniq -c | sort -r

這會刪除前綴並顯示檔案被「重複」的次數

答案2

這將列印不帶前綴的文件名列表:

awk -F ' - ' '{counts[$2]++; names[$0]} END {for (item in counts) {if (counts[item] > 1) {print item}}}' < <(printf '%s\n' *)

輸出範例:

Solar Eclipse.mp3
Rolling Hills.mp3

要列印每個文件的完整文件名:

awk -F ' - ' '{counts[$2]++; names[$0]} END {for (name in names) {split(name, parts, / - /); if (counts[parts[2]] > 1) {print name}}}' < <(printf '%s\n' *)

輸出範例:

027 - Solar Eclipse.mp3
003 - Solar Eclipse.mp3
244 - Rolling Hills.mp3
103 - Rolling Hills.mp3

不保證輸出中文件的順序被分組(即使在這個簡單的範例中也是如此)gawk

awk -F ' - ' '
    {
        counts[$2]++;
        names[++c] = $2 " - " $1
    }
    END {
        num = asort(names);
        for (i = 1; i <= num; i++) {
            split(names[i], indices, / - /)
            if (counts[indices[1]] > 1) {
                print indices[2] " - " indices[1]
            }
        }
    }
' < <(printf '%s\n' *)

如果你沒有gawk,你可以使用sort

awk ... | sort -k3,3

printf您可以將其透過管道傳輸到 AWK 腳本中,而不是使用進程替換。或者,如果您想遞歸地執行此操作,則可以find在管道中使用或使用進程替換。如果您希望遞歸運行來全域比較檔名,則需要刪除find預設輸出的目錄名稱。

相關內容