Bashでディレクトリを一覧表示して出力する方法

Bashでディレクトリを一覧表示して出力する方法

フォルダー内のディレクトリのリストを取得し、そのリストを実行可能ファイルに出力して、何かを実行したいと考えています。

基本的に、この bash ファイルには、、、など、最大 30 個に達する$directory可能性のある、内のフォルダーのリストが必要です。すべてのサブフォルダーには、記号が追加されます。@sub1@sub2@sub3@

現在、サブフォルダを手動でリストに追加し、 で呼び出します。-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 ..... {} +;

関連情報