次のようにできますか?
inputNum="$1"
files=($(find /dir/to/check -mtime $inputNum))
デフォルトでは、アイデアは、入力パラメータを使用してファイルを検索する日数を設定し、それを変数の配列に設定できることです。 Bashで読むことができる構文はわかりません。
答え1
代わりに、使用しない限り、出力は安定してfind
後処理できません(ジョブが指定されていない場合は暗黙的に)。-print0
-print
-print
出力を後処理しfind -print0
てファイルパスを配列に保存するには、次のようにします。
Bash4.4+の場合:
readarray -td '' files < <(find /dir/to/check -mtime "$inputNum" -print0)
以前のバージョンの場合:
files=()
while IFS= read -rd '' file; do
files=("${files[@]}" "$file")
done < <(find /dir/to/check -mtime "$inputNum" -print0)
より一般的には、次のアドバイスを読んでください。検索結果を繰り返すのはなぜ悪い習慣ですか?
答え2
使えるなら扱いにくいbashの代わりにはるかに簡単です。 Zsh は属性に基づいてファイルを照合できます。グローバル予選。
files=(/dir/to/check/**/*(Dm$inputNum))
**/*
サブディレクトリを再帰的に検索します。次の角カッコには*
glob修飾子が含まれています。D
ドットファイルを含め、m
変更時間(日)に基づいてファイルと一致しますfind -mtime
(別の単位を選択して時間を制限することもできます(たとえば、(Dmm-$min)
このようにfind -mmin -$min
))。
ZshはmacOSにプリインストールされています。他のほとんどのUNIXシステム(特にほとんどのLinuxディストリビューション)はパッケージ化されていますが、デフォルトではインストールされません。