如何在 Bash 中列出目錄和輸出

如何在 Bash 中列出目錄和輸出

我想獲取資料夾內的目錄列表,並將該列表輸出到可執行檔中,該執行檔使用它們來運行某些內容。

幾乎,這個 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 ..... {} +;

相關內容