私はスクリプトを作成し、FILES=($S_DIR/$OPTIONS)
基本的にファイル配列を生成するこのような構造を使用しました。このように: FILES=(/tmp/*/workspace/*zip)
。
スクリプトが700個のファイル/フォルダに対して実行されるまで、この方法は私にはうまくいきました。この特定の行を呼び出す方法はありますかsudo
?もちろん、find
またはを使用してls
ファイルのリストをインポートできます。しかし、このアプローチも可能かどうかを知りたいです。ありがとうございます!
編集する:
私はNagiosの小切手を作成しており、フォルダ内の指定された種類のすべてのファイルを確認したいと思います。確認したいすべてのファイルには700権限があるため、ユーザーはそのnagios
ファイルを読み取ることができません。そして配列はFILES
バインドされません。そして、必要なファイル属性を確認できません。だから、FILES=($S_DIR/$OPTIONS)
などの外部ユーティリティなしでfind
埋める方法を探していますls
。私のスクリプトは、ユーザーに権限を持つファイル/フォルダで動作します。簡単に言えば、スクリプトでこの行に対する権限を高めるだけです。FILES=(/tmp/*/workspace/*zip)
答え1
FILES=blah
まず、いいえ、変数はシェル内にあり、エクスポートされた変数は子プロセスに伝播されている間に伝播する方法がないため、この割り当てを他のプロセスにプッシュすることはできません。戻る両親と先祖に贈る過程です。
ただし、外部コマンドを実行し、その出力を配列として選択できます。ファイル名の特殊文字のシェルグロップほど安全ではありませんが、bashは特殊文字を区切り文字'\0'
として好きではないようです。改行文字を含むファイルがない場合は、次のように動作します。
IFS=$'\n' # only split on newlines
FILES=( $(find ...) ) # or
FILES=( $(sudo find ...) )
ただし、高い権限でファイルリストを作成すると、後でリスト内のファイルにアクセスできなくなる可能性があります。たとえば、ユーザーがアクセスできないディレクトリにある場合、stat
アクセスしても効果はありません。
とにかく、すべてのことを安全に行うには、非常にsudo
制限されたコマンドセットが許可されます(スクリプトを実行しているユーザーの場合)。そうしないと、誰かが変わっsudo find
たり悪化したりするのを防ぐことができませんsudo find -delete
。