は今のところ、私はかなり総ソリューションを持っている:ディレクトリ内のすべてのファイルを環境変数に入れるのは良い方法ですか?
FILES=" "
for f in `find $DIR -type f`; do FILES=$FILES$f" "; done
はこれを行うためのよりよい方法はあります(私はそれぞれの間にスペースが必要ないことに注意してください)?
は今のところ、私はかなり総ソリューションを持っている:ディレクトリ内のすべてのファイルを環境変数に入れるのは良い方法ですか?
FILES=" "
for f in `find $DIR -type f`; do FILES=$FILES$f" "; done
はこれを行うためのよりよい方法はあります(私はそれぞれの間にスペースが必要ないことに注意してください)?
使用コマンド置換:
FILES=$(find "$DIR" -type f)
は、しかし、これには注意してください。スペースをファイル名の間の区切り文字として使用すると、スペースを含むファイル名を扱うことができなくなります。これは、ファイル名が単純に書式化されていることを知っているコンテキストでのみ使用できます。より一般的な状況では、配列を使用する必要があります。
美しい...私は清潔な方法があることを知っていた! –
@AQuestionAsker実際には全く清潔ではありません。これはうまく見えるかもしれませんが、ファイル名には空白を入れないので、 'FILES'からファイルのリストを再作成することは不可能です。さらに、Bashでは配列があります。 。 –
@RanyAlbegWein彼の元のループは、空白を含むファイル名でも動作しないので、彼はそれについて気にしないと思います。 – Barmar
bash
の最新バージョンを使用していると仮定すると、find
を一切使用せずに配列を使用できます。
shopt -s globstar
for f in **/*; do
[[ -f $f ]] && FILES+=("$f")
done
どのようなユースケースですか?これはX-Yの問題かもしれません。 – karakfa
後でこの 'FILES'変数をどのように使いたいですか? – anubhava
ファイルの任意のリストを1つの文字列にクリーンに保存することはできません。そのため、クリーンな方法を求めている点はほとんどありません。 – chepner