Procura pelo arquivo mais recente e verifica se o arquivo é mais antigo que a data 'X'

2

Eu estou tentando escrever um script que pesquisará recursivamente os subdiretórios de um diretório e fará o seguinte:

  1. Encontre o arquivo mais recente nesse subdiretório
  2. Encontre a data desse arquivo mais recente
  3. Verifique se esse arquivo é mais antigo que X dias. (180)
  4. Se o arquivo tiver mais de X dias, envie seu caminho para um arquivo chamado "OLD.txt"
  5. Se o arquivo NÃO tiver mais de X dias, envie seu caminho para um arquivo chamado "YOUNG.txt"

Atualmente, isso é tudo que tenho. Eu não tenho certeza de como pegar a data do arquivo através do comando find, faça a comparação if / then.

#!/bin/bash
for d in /u1/?/*/Maildir/new ;
do FILE=$(find "$d" -printf '%T+ %p\n' | sort -r | head >> Test.txt)
done

Outras tentativas com o mesmo tipo de código:

#!/bin/bash
echo "Find files older & younger than X days"
echo "Type the number of X days and hit 'Enter':"
read PERIOD
for d in /u1/?/*/Maildir/new ;
do FILE=$(find "$d" -type f -mtime +$PERIOD -exec ls {} \; >> OLDER.txt)
done
for d in /u1/?/*/Maildir/new ;
do FILE=$(find "$d" -type f -mtime -$PERIOD -exec ls {} \; >> YOUNGER.txt)
done
echo "COMPLETE!"
echo "Check 'OLDER.txt' and 'YOUNGER.txt' files in current directory for output"

O problema com o último, é que ele envia TODOS os arquivos, enquanto eu preciso apenas encontrar o arquivo mais RECENTE no diretório, e ter certeza de que o arquivo mais RECENTE não tenha mais que X dias.

    
por Pietro Aretino 20.01.2017 / 19:40

2 respostas

0

Aqui está uma versão bash .

#!/bin/bash
maildir='/u1/?/*/Maildir/new'
DAYS_OLD=180

for d in $maildir ; do
    if [ -d "$d" ] ; then
        FILE="$d/"$(ls "$d" -t1  | head -n 1)
        echo $FILE
        if test $(find "$FILE" -mtime +$DAYS_OLD) ; then
            echo $FILE >> OLDER.txt
        else
            echo $FILE >> YOUNGER.txt
        fi
    fi
done
    
por 23.01.2017 / 21:38
3

bash não é o melhor shell para isso.

com zsh :

#! /bin/zsh -
period=${1?Period not given}
for d (/u1/?/*/Maildir/new) {
  newest=($d/*(DN.om[1]))
  (($#newest)) || continue

  over=($newest(Nm+$period))
  if (($#over)); then
    ls -ld $newest >> OLDER.txt
  else
    ls -ld $newest >> YOUNGER.txt
  fi
}
    
por 20.01.2017 / 19:49