[英]bash: get path from current directory given sub-directory name
刪除資源后嘗試編寫腳本來清理環境文件。 問題在於,所有腳本都是作為輸入給出的,即資源的名稱(無法更改),且標識信息為零。 如何找到資源所在目錄的路徑?
該目錄的設置類似於以下內容,盡管范圍更廣。 所有這些都是目錄,而不是文件。 可以搜索多達40多個目錄,但所需目錄通常不超過2-3個。
foo
aaa
aaa_green
aaa_blue
bbb
ccc
ccc_green
bar
ddd
eee
eee_green
eee_blue
fff
fff_green
fff_blue
fff_pink
我可能會收到像aaa_green
或ddd
這樣的輸入。
例如,以eee_blue
作為輸入,我需要知道工作目錄中eee_blue
的路徑,以便可以在該目錄下進行cd並刪除該目錄。 IE,我希望可以返回bar/eee/eee_blue/
或bar/eee/
。
我目前可以看到的“最佳”選項是通過多次插入CD進入每個目錄的最低級別,獲取每個目錄的內容並尋找匹配項,然后(最終)匹配時將cd保存為路徑。 坦白地說,這聽起來很糟糕且效率低下。
我能想到的唯一其他替代方法是直接遞歸grep,但我對其進行了測試,但在8分鍾后仍未完成運行。
這個腳本需要同時在Mac和Linux上運行,盡管在緊急情況下我只能使用linux。
用於執行此類任務的標准Unix工具是find
命令。 find
的GNU版本具有比POSIX規范更廣泛的選擇(相當可觀)。 macOS Sierra(和Mac OS X)上的版本類似於GNU版本。 我在Apple find
了OS X 10.9的在線手冊,但是某個地方的位置可能更好。
看來您可能要運行:
find . -name 'eee_blue'
它將打印匹配文件或目錄的名稱,或者:
find . -name 'eee_blue' -exec rm -fr {} +
它將對每個名稱運行rm -fr
命令。 如果願意,可以運行您創建的自定義腳本來代替rm -fr
; 如果邏輯很復雜,那就是我要做的。
自動使用rm -fr
要格外小心!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.