Find

使用 basename 解析文件中保存的路徑列表

  • June 6, 2018

我正在執行 Mac OSX 並嘗試使用命令行來查找我擁有的同名文件的數量。

我嘗試使用以下命令:

find ~ -type f -name "*" -print | basename | sort | uniq -d > duplicate_files

它不起作用!當我執行以下操作時:

find ~ -type f -name "*" -print > duplicate_files

然後 duplicate_files 確實包含我所有文件的路徑。所以我認為問題在於basename- 它不接受標準輸入。然後我嘗試了以下方法:

basename $(find ~ -type f -name "*" -print) > duplicate_files

但這似乎不起作用。在網際網路上搜尋似乎並沒有帶來太多的樂趣。歡迎任何想法。

basename對其命令行參數進行操作,它不會從標準輸入中讀取。

您不需要呼叫該basename實用程序,最好不要:它所做的只是剝離 last 之前的部分/,並且為每個條目呼叫外部命令會很慢,您可以使用文本處理實用程序代替。

find ~ -type f | sed 's!.*/!!' | sort | uniq -d

跟踪文件的位置可能更有用。按名稱排序更容易找到重複項,但sort沒有使用最後一個欄位的選項。您可以做的是將最後一個/分隔的欄位複製到開頭,然後排序,然後使用一些特別的 awk 處理來提取和呈現重複項。

find ~ -type f |
sed 's!.*/\(.*\)!\1/&!' |   # copy the last field to the beginning
sort -t/ -k1,1 |
cut -d/ -f2- |   # remove the extra first field (could be combined with awk below)
awk -F / '{
   if ($NF == name) {
       if (previous != "") {print previous; previous = ""}
       print
   } else {
       previous = $0
       name = $NF
   }
'

(請注意,我假設您的文件名都不包含換行符。)

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