web-dev-qa-db-ja.com

各サブディレクトリ内の別のファイルよりも新しいファイルを見つける

このようなフォルダ構造があります

/Class/Student/Unit/files

各UnitフォルダーにはファイルMarkSheet*が含まれており、生徒の作品にマークを付けるときに更新します。

生徒が最後に作品にマークを付けたときよりも新しいファイルを生徒がアップロードしたかどうかをテストするスクリプトが必要です。

以下は、私が手に入れることができたものに近いものです(動作しません)。

#!/bin/sh
find . -mindepth 3 -maxdepth 3 -type d -name '*' -execdir \
find "{}" -type f -newer "{}"/MarkSheet* \;
6
ArchNemSyS
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 {} +
4

これを試して:

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*ファイルを含むディレクトリの名前を取得することです。

1
terdon