このようなフォルダ構造があります
/Class/Student/Unit/files
各UnitフォルダーにはファイルMarkSheet*
が含まれており、生徒の作品にマークを付けるときに更新します。
生徒が最後に作品にマークを付けたときよりも新しいファイルを生徒がアップロードしたかどうかをテストするスクリプトが必要です。
以下は、私が手に入れることができたものに近いものです(動作しません)。
#!/bin/sh
find . -mindepth 3 -maxdepth 3 -type d -name '*' -execdir \
find "{}" -type f -newer "{}"/MarkSheet* \;
for ms in Class/*/*/MarkSheet*; do
find "${ms%/*}" -type f -newer "$ms"
done
このアプローチでは、MarkSheet*
グロブを展開するためにシェルを使用する必要があります。そう:
find . -mindepth 3 -maxdepth 3 -type d -exec sh -c '
for dir do
find "$dir" -type f -newer "$dir"/MarkSheet*
done' sh {} +
これを試して:
find /Class/ -maxdepth 1 -mindepth 1 -type d | while IFS= read -r student; do
find "$student" -type f -newer "$student/Unit/MarkSheet"*
done
最初のfind
は生徒のディレクトリを検索し、2番目は対応するMarkSheetよりも新しいファイルを検索します。
他の方法で行うこともできます:
find Class/ -name 'MarkSheet*' | while IFS= read -r mark; do
find "$(dirname "$mark")" -newer "$mark" -type f;
done
ここでの秘訣は、dirname
を使用して、MarkSheet*
ファイルを含むディレクトリの名前を取得することです。