
フォルダー内のディレクトリのリストを取得し、そのリストを実行可能ファイルに出力して、何かを実行したいと考えています。
基本的に、この 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 ..... {} +;