2016-04-13 4 views
1

は今のところ、私はかなり総ソリューションを持っている:ディレクトリ内のすべてのファイルを環境変数に入れるのは良い方法ですか?

FILES=" " 
for f in `find $DIR -type f`; do FILES=$FILES$f" "; done 

はこれを行うためのよりよい方法はあります(私はそれぞれの間にスペースが必要ないことに注意してください)?

+1

どのようなユースケースですか?これはX-Yの問題かもしれません。 – karakfa

+1

後でこの 'FILES'変数をどのように使いたいですか? – anubhava

+0

ファイルの任意のリストを1つの文字列にクリーンに保存することはできません。そのため、クリーンな方法を求めている点はほとんどありません。 – chepner

答えて

3

使用コマンド置換:

FILES=$(find "$DIR" -type f) 

は、しかし、これには注意してください。スペースをファイル名の間の区切り文字として使用すると、スペースを含むファイル名を扱うことができなくなります。これは、ファイル名が単純に書式化されていることを知っているコンテキストでのみ使用できます。より一般的な状況では、配列を使用する必要があります。

+0

美しい...私は清潔な方法があることを知っていた! –

+1

@AQuestionAsker実際には全く清潔ではありません。これはうまく見えるかもしれませんが、ファイル名には空白を入れないので、 'FILES'からファイルのリストを再作成することは不可能です。さらに、Bashでは配列があります。 。 –

+0

@RanyAlbegWein彼の元のループは、空白を含むファイル名でも動作しないので、彼はそれについて気にしないと思います。 – Barmar

3

bashの最新バージョンを使用していると仮定すると、findを一切使用せずに配列を使用できます。

shopt -s globstar 
for f in **/*; do 
    [[ -f $f ]] && FILES+=("$f") 
done 
関連する問題