我想刪除由iTunes創建的重複文件,這些文件都以「1.mp3」結尾。我已經接近匹配,但我不知道如何匹配空間。有人可以寫一個命令遞歸地從當前目錄中刪除這些文件嗎?在bash中匹配空格
回答
你想通過你的iTunes音樂收藏,並刪除Nickelback的如果我不在乎1.MP3但是,只有當Nickelback樂隊原MP3,如果我care.mp3,依然存在。對?
嘿,你的音樂品味是由你...
這應該做的伎倆:
find -name "* 1.mp3" | while read file
do
if [ -e "${file% 1.mp3}.mp3" ]
then
rm $file
fi
done
我發現所有(在空間1.MP3結束歌曲)的重複並將它們管理到while
聲明。
${word%filter}
語法表示採取$word
並從右側刪除glob表達式filter
。因此,${file% 1.mp3}
是該文件的名稱,其後綴爲1.mp3
。現在,If I care 1.mp3
變成If I care
。因此,我們需要重新添加.mp3
後綴。因此${file% 1.mp3}.mp3
。這給了我們文件的原始名稱。
現在我們使用-e
測試來檢查該文件是否存在。如果是這樣,我們可以刪除歌曲的space-1.mp3版本。
我跑了一些基本的測試,但我建議你先嚐試一下(也許首先更改rm $file
到echo Removing file $file
並驗證這些文件是否有原始文件)。
find . -name "* 1.mp3" -exec rm {} \;
聽起來像find
的工作!
find . -type f -name '* 1.mp3' -print0 | xargs -0 rm
其他解決方案類似,但會檢查文件沒有的「1」後綴真的存在,因此它不會不期而遇刪除歌曲後綴名爲「1」。
shopt -s globstar
for file in **/*' '1.mp3 ; do
if [[ -f "${file% 1.mp3}.mp3" ]] ; then
rm "$file"
fi
done
當'file.mp3'實際上是'file 1.mp3'的符號鏈接時,這裏就有一個漏洞。此外,你可以做一個校驗和,看看這些文件是否真的是一樣的...哎呀,你可以做一個模糊檢查的情況下,編碼/標籤是不同的。現在得到相當偏離 – sehe
更快:
find . -name "* 1.mp3" -exec rm {} +
find . -type f -name '* 1.mp3' -print0 | xargs -0 rm
哪個kbyrd提到是根據我的最佳方式,因爲-print0和-0組合,因爲。
-print0 True;在標準輸出上打印完整文件名,然後用空字符(而不是 -print使用的換行符)跟在 之後。這允許包含換行符或其他類型的空格的文件名由處理查找輸出的pro- 克正確解釋。該選項對應於xargs的-0選項 。
- 1. 在Perl中用空格或無空格匹配字符串
- 2. 僅匹配空格內{}
- 3. 匹配值根據在bash
- 4. 匹配不在行尾的空格
- 5. 僅匹配空格的通配符
- 6. Bash:模式匹配
- 7. Bash模式匹配
- 8. Bash匹配數字
- 9. 你在bash中如何匹配^ [\ s] *?
- 10. bash腳本中的空格
- 11. 不匹配數字或空格時匹配的詞+數字
- 12. 避免重複匹配,如果匹配空格前面
- 13. 如何在javascript中匹配alt + 0160(無中斷空格)?
- 14. PHP preg_replace不匹配多個空格
- 15. Reg Exp:僅匹配數字和空格
- 16. SED空格/換行符匹配 - Linux
- 17. java的模式匹配insenitive爲空格
- 18. awk匹配模式無空格
- 19. Python:匹配一個單詞(用空格)
- 20. Antlr3匹配沒有空格的標記
- 21. 正則表達式僅匹配空格
- 22. VBA索引/匹配空白單元格
- 23. 匹配以空格開頭的多行
- 24. 用preg_replace匹配重複的空格
- 25. fscanf()/ sscanf() - 匹配可變長度空格?
- 26. 匹配圖像鏈接包含空格
- 27. \ s +不匹配所有空格?
- 28. 正則表達式 - 匹配空格
- 29. 如何使xpath匹配空格?
- 30. 讓兩個字符串匹配空格
我很抱歉這麼晚回覆,它完美的工作,並感謝偉大的解釋。 – Chironex