Localizar arquivos mais recentes que outro arquivo em cada subdiretório

5

Eu tenho uma estrutura de pastas como esta

/Class/Student/Unit/files

Cada pasta Unit contém um arquivo MarkSheet* que atualizo quando marquei um trabalho de alunos.

Eu preciso de um script que teste se o aluno enviou arquivos mais recentes do que quando eu marcava o trabalho pela última vez.

O que se segue é o mais próximo que consegui (o que não funciona).

#!/bin/sh
find . -mindepth 3 -maxdepth 3 -type d -name '*' -execdir \
find "{}" -type f -newer "{}"/MarkSheet* \;
    
por ArchNemSyS 25.01.2014 / 17:40

2 respostas

3
for ms in Class/*/*/MarkSheet*; do
  find "${ms%/*}" -type f -newer "$ms"
done

Com sua abordagem, você precisa de um shell para expandir o MarkSheet* glob. Então:

find . -mindepth 3 -maxdepth 3 -type d -exec sh -c '
  for dir do
    find "$dir" -type f -newer "$dir"/MarkSheet*
  done' sh {} +
    
por 25.01.2014 / 18:38
1

Tente isto:

find /Class/ -maxdepth 1 -mindepth 1 -type d | while IFS= read -r student; do
    find "$student" -type f -newer "$student/Unit/MarkSheet"*
done

O primeiro find procura os diretórios de alunos e o segundo, os arquivos neer do que o MarkSheet correspondente.

Você também pode fazer o inverso:

find Class/ -name 'MarkSheet*' | while IFS= read -r mark; do 
  find "$(dirname "$mark")" -newer "$mark" -type f; 
done

O truque aqui é usar dirname para obter o nome do diretório que contém o arquivo MarkSheet* .

    
por 25.01.2014 / 18:30