簡體   English   中英

bash:從給定子目錄名稱的當前目錄獲取路徑

[英]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_greenddd這樣的輸入。

例如,以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM