我有一個名爲test
的目錄,它在日期範圍中具有子文件夾,如01
,02
,31
。這個所有子文件夾都包含.bz2文件。我需要使用find命令搜索所有帶.bz2擴展名的文件,但不包括特定範圍的目錄。我知道find . -name ".bz2" -not -path "./01/*"
,但編寫-not -path "./01/*"
會太可悲了,如果我想跳過10個目錄。那麼如何跳過我的find
命令中的01..19
子目錄?排除查找命令中的目錄範圍
0
A
回答
4
您可以使用通配符在模式的選擇-not -path
:
find ./ -type f -name "*.bz2" -not -path "./0*/*" -not -path "./1*/*
這將排除所有目錄開始的0或1甚至更好:
find ./ -type f -name "*.bz2" -not -path "./[01]*/*"
3
首先,你可以幫助find
通過使用-prune
而不是-not -path
- 這將避免甚至在相關目錄內查看。
要你的主要觀點 - 你可以建立你的榜樣(數字01到19)通配符:
find . -path './0[1-9]' -prune -o -path './1[0-9]' -prune -o -print
如果你的範圍是不太方便(如05到25),你可能想建立的範圍內成一個bash變量,然後插即入find
命令:
a=("-path ./"{05..25}" -prune -o")
find . ${a[*]} -print -prune
(你可能要echo "${a[*]}"
或printf '%s\n' ${a[*]}
,看看它是如何工作的)
2
對我來說,我發現找到命令作爲一個獨立的工具莫名其妙麻煩。因此,我總是最終使用查找的組合,僅用於遞歸文件搜索和grep以製作實際的排除/包含內容。最後,我將結果交給第三個執行操作的命令,例如rm刪除文件。
我的通用命令會是這樣的:
find [root-path] | grep (-v)? -E "cond1|cond2|...|condN" | [action-performing-tool]
- 根路徑是從哪裏開始搜索遞歸
- 添加-v選項用於反轉匹配的結果。
- cond1 - condN,匹配條件。當-v是involed時,則這是不匹配的條件。
- 動作表現的工具,做實際工作
例如要刪除所有文件不在當前目錄中匹配一些條件:
find . -not -name "\." | grep -v -E "cond1|cond2|cond3|...|condN" | xargs rm -rf
正如你所看到的,我們在dot指定的當前目錄中搜索根路徑:然後我們要反轉匹配結果,因爲我們希望所有文件不是符合我們的條件:最後我們將所有找到的文件都傳遞給rm爲了刪除它們:我加-rf遞歸/強制刪除所有文件。我用-not -name「。」來使用find命令。排除通常由點指示的當前目錄。
對於實際工作中的問題:假設我們有git的使用和.metadata目錄的目錄,我們要排除他們在我們的搜索:
find . -not -name "\." | grep -v -E ".git|.metadata" | [action-performing-tool]
希望幫助!
相關問題
- 1. BASH:在「查找」命令中排除目錄
- 2. 使用find命令,查找目錄排除一些元素
- 3. 從查找命令中排除文件
- 4. 如何排除查找中的目錄
- 5. 排除在命令行輸出目錄
- 6. 查找給定目錄的命令
- 7. 查找命令忽略目錄
- 8. 「查找」命令與可變目錄
- 9. 在排序數組中查找範圍內屬性的項目?
- 10. 從PHPUnit中排除基礎目錄代碼覆蓋範圍
- 11. 排除從查找目錄和
- 12. 的Xpath - 查找範圍,排除孩子我的屬性
- 13. 從選擇命令中排除記錄
- 14. 使用find命令但排除兩個目錄中的文件
- 15. 排除Unix中沒有讀取訪問的目錄find命令
- 16. Bash命令 - 刪除目錄
- 17. 檢查範圍與命令行參數
- 18. 複製範圍內排除範圍
- 19. 查找範圍
- 20. 查找C中的範圍
- 21. PhpStorm - 從「ctrl + shift + n」命令中排除目錄
- 22. 在Bash腳本中使用find命令並排除子目錄
- 23. 查找並替換命名範圍
- 24. 目錄API範圍
- 25. 找到正則表達式的命令查找目錄
- 26. 如何在ClearCase查找命令中按名稱排除文件?
- 27. 運行命令範圍
- 28. 命令行中的IP範圍
- 29. 根據日期範圍查找記錄
- 30. 在日期範圍內查找記錄
非常感謝。像魅力一樣工作。 +1。 – Rahul