關(guān)鍵:把find的結(jié)果(目標(biāo)文件夾或目錄)作為參數(shù)交給cd

問(wèn)題和需求:
假設(shè)只記得在某個(gè)路徑里有一個(gè)名稱中包含了"WPS"3個(gè)字母的文件夾,但是具體路徑想不起來(lái)了?,F(xiàn)在需要找到它,并立即跳轉(zhuǎn)到這個(gè)文件夾里面去。
常規(guī)的做法分兩步:
「1」find [搜尋目錄] -name "WPS" -type d
「2」cd (第「1」步得到的文件夾路徑)
現(xiàn)在覺得這樣比較麻煩,就想通過(guò)一步到位的辦法,直接就查找、跳轉(zhuǎn)到目標(biāo)文件夾里去。
關(guān)鍵:
關(guān)鍵其實(shí)就在于要把find命令得到的文件夾路徑作為參數(shù)提供給cd命令執(zhí)行。
嘗試過(guò)經(jīng)常被提到的使用xargs參數(shù)的方法,但是失敗了!
(find / -name "*WPS*" -type d | xargs cd)
# 失敗了
解決:
使用「1」一對(duì)反引號(hào)(``)或者「2」美元符號(hào)加一對(duì)小括號(hào)$()可以解決這個(gè)問(wèn)題。
具體為:
cd `find / -name "*WPS*" -type d `
# 或者
cd $(find / -name "*WPS*" -type d )
第「2」種更容易看一點(diǎn),畢竟反引號(hào)(``)和單引號(hào)一眼看過(guò)去不是那么容易區(qū)分。
驗(yàn)證:
簡(jiǎn)便起見,就以查找并跳轉(zhuǎn)進(jìn)入當(dāng)前目錄下的某個(gè)子目錄為例來(lái)演示。

在當(dāng)前目錄下,想查找并跳轉(zhuǎn)到名稱中包含了"WPS"3個(gè)字母的文件夾中去,同時(shí),在當(dāng)前目錄下「有且只有」一個(gè)這樣的文件夾。
「有」這樣的文件夾,那么find的結(jié)果就不是空,否則cd就跳轉(zhuǎn)到用戶目錄下去了。
「只有」一個(gè)這樣的文件夾,那么find的結(jié)果是唯一的,最后跳轉(zhuǎn)的目標(biāo)才是確定的。

查找、跳轉(zhuǎn),一步到位!
另外,順便提一下一個(gè)小竅門:比如千辛萬(wàn)苦進(jìn)入了一個(gè)很多層的目錄下了,一不小心輸入了cd一下子回到了用戶目錄下,怎么找回去呢?其實(shí)很簡(jiǎn)單,cd后面跟一個(gè)短橫就可以了:
cd -

該命令等同于
cd $OLDPWD
關(guān)于這一點(diǎn)在bash的手冊(cè)頁(yè)(可使用命令man bash訪問(wèn)其手冊(cè)頁(yè))中有介紹,
An argument of - is equivalent to $OLDPWD.
并且它還會(huì)返回上一次目錄的物理路徑,并顯示在shell中。
結(jié)束語(yǔ):
其實(shí)上面這樣的cd和find的組合,還是有很大的局限性的,只能說(shuō)在某些時(shí)候可以用用吧。
在github上有一個(gè)項(xiàng)目,名字叫「autojump」,star數(shù)高達(dá)8.7K,也是很受歡迎了!它的介紹是「A cd command that learns - easily navigate directories from the command line 」,在終端里使用單字母「j」作為命令,后面可以直接附帶要跳轉(zhuǎn)的文件夾的名稱或部分名稱,也可以附帶參數(shù)+要跳轉(zhuǎn)的文件夾的名稱或部分名稱,就會(huì)跳過(guò)去了。這個(gè)使用起來(lái)就比上面的cd和find的簡(jiǎn)單組合的容錯(cuò)性、可用性大多了。

(筆記留存)
硯湖@飄香生活館
二〇一九年一月十一日