歡迎您光臨本站 註冊首頁

基於linux命令提取文件夾內特定文件路徑

←手機掃碼閱讀     niceskyabc @ 2020-06-05 , reply:0

最近需要實現自動化搜尋特定文件夾下的特定文件,並且需要分別保存文件路徑與文件名。算然使用python的walk能夠實現,但是感覺複雜了些。於是想看看linux自帶的命令是否能完成這項工作。

環境
 

需要查找的目錄結構如下

. |____test | |____test2.txt | |____test.py | |____test.txt | |____regex.py |____MongoDB | |____.gitignore | |____cnt_fail.py | |____db
 

目標一:獲取所有py文件名
 

如果只使用find . -name '*.py'進行查找,得出的結果是包含路勁的

./test/test.py
 ./test/regex.py
 ./MongoDB/cnt_fail.py
 

我們只需要文件名的話可以使用linux提供的命令basename
 

利用basename將find的所有搜索結果進行處理我們需要使用find的參數-exec
 

最終的命令為:
 

find . -name '*.py' -exec basename {} ;
 

結果:

test.py
 regex.py
 cnt_fail.py
 

其中{} 用於與-exec選項結合使用來匹配所有結果,然後支取其文件名。

目標二:獲得所有py文件路徑,去重複,刪除開頭的“./”字符
 

linux也有獲取文件路徑的命令dirname
 

略微修改之前的命令能夠顯示所有文件路徑

find . -name '*.py' -exec dirname {} ;
 搜索結果:

./test
 ./test
 ./MongoDB
 

可以看到路徑存在重複,linux去除重可以利用sort再添加-u參數,-u參數用於去除排序結果中的重複項
 我們需要把上一個命令的輸出傳遞給sort作為輸入,很自然想到了管道

管道命令操作符是:|,它僅能處理經由前面一個指令傳出的正確輸出信息,也就是 standard output 的信息,對於 stdandard
 error 信息沒有直接處理能力。然後,傳遞給下一個命令,作為標準的輸入 standard input.

添加sort之後的命令為

find . -name '*.py' -exec dirname {} ; | sort -u
 

運行結果結果為:

./MongoDB
 ./test
 

最後我們再利用cut刪除每一個路勁之前的./字符,參數-c3-意思提取字符串(起始位置為1)的第3個字符到最後的子串
 最終命令為:

find . -name '*.py' -exec dirname {} ; | sort -u | cut -c3-
 

運行結果:

MongoDB
 test


[niceskyabc ] 基於linux命令提取文件夾內特定文件路徑已經有240次圍觀

http://coctec.com/docs/linux/show-post-237061.html