
我想獲取資料夾內的目錄列表,並將該列表輸出到可執行檔中,該執行檔使用它們來運行某些內容。
幾乎,這個 bash 檔案需要 my 中的資料夾列表$directory
,其範圍從@sub1
、@sub2
、@sub3
、有時一直到 30 個@
。
目前,我手動將子資料夾添加到我的列表中,並使用 進行調用-sub="$subs"
,其中 subs 在上面定義為
subs="$directory/@sub1;$directory/@sub2;
... 等
我確實需要保持相同的輸出格式,以與可執行檔的建置方式保持一致。
自動化此操作的最佳方法是什麼?抱歉,如果有點奇怪,這是我的第一個問題。
答案1
可能的解決方案:find . -type d -name '@*' -print0 -maxdepth 1 | xargs -0 yourprog
首先是空資料夾,有幾個名為 @subX 的資料夾,這是我們不需要的檔案。
mkdir test
cd test
mkdir @sub1
mkdir @sub2
mkdir @sub3
mkdir subway
touch testfile
cd \@sub2
touch bar
mkdir @test
cd ..
尋找內容並將它們列印到標準輸出,用它們執行某些內容以及類似的操作可以使用find
.使用它而不是嘗試解析 ls 輸出。
第一個參數是要搜尋的資料夾(例如find .
目前目錄)
-type d
僅過濾目錄(無檔案)
-name '@*'
任何以@開頭的匹配
-print0
將結果列印到標準輸出。 -print 也可以工作,但是 -print0 在空格等情況下會做特別的事情。
-maxdepth 1
不搜尋子資料夾)
find . -type d -name '@*' -print0 -maxdepth 1
上面設定的結果:
./@sub1./@sub2./@sub3
請注意,它們以 ./ 為前綴,這對您來說可能是問題,也可能不是問題。
還值得一讀:find 的 -exec 選項和 find ..... {} +;