se o último tamanho de arquivo de um diretório for o mesmo um com o outro, saia do otheriwse continue [closed]

0

Por favor, me dê qualquer script bash que me ajude a executar a seguinte tarefa:

se o último tamanho adicionado de 4 arquivos de um diretório for o mesmo um com o outro, então saia do outro modo continue

Exemplo:

ls -l $dir_path | awk '{print $5}' | tail -4

se os 4 valores impressos forem iguais entre si, saia, caso contrário, continue.

    
por Samiul 22.07.2016 / 14:13

2 respostas

1

zsh -c 'zmodload zsh/stat
  [[ $(zstat -N +size -- *(.om[1,4])) =~ $'\''(.*)\n\1\n\1\n\1'\'' ]]' && exit

Será encerrado se todos os 4 arquivos regulares não ocultos mais recentes no diretório atual tiverem o mesmo tamanho.

Em um sistema GNU, você também pode fazer:

find . -maxdepth 1 ! -name '.*' -type f -printf '%T@ %s\n' |
  sort -rn |
  awk 'NR == 1 {v = $0}; v != $0 {exit}; NR == 4 {exit 1}' || exit

POSIXly:

ls -tnq -- "$dir_path" |
  awk '!/^-/ {next}
       n++ == 0 {v = $5}
       v != $5 {exit}
       n == 4 {exit 1}' || exit

Se como em sua própria abordagem, em vez dos 4 mais novos, você quer os últimos 4 (independentemente de serem arquivos regulares ou links simbólicos ou sockets ...) na ls output (que é uma ordem alfabética lista ordenada), você pode fazer (ainda POSIXly):

ls -rnq -- "$dir_path" |
  awk 'NR == 1 {next}
       NR == 2 {v = $5}
       v != $5 {exit}
       NR > 4 {exit 1}' || exit
    
por 22.07.2016 / 14:36
0

Use ls -c para classificar por ctime e uniq para ver se são iguais.

ls -crntq | tail -4 | awk '{print $5}' | uniq -c | grep -q "^\s*4\s" && exit
    
por 22.07.2016 / 15:26