Find
使用 basename 解析文件中保存的路徑列表
我正在執行 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 } '
(請注意,我假設您的文件名都不包含換行符。)