Como ignorar arquivos se houver um arquivo semelhante com o mesmo tamanho?

1

Eu quero listar os arquivos em um diretório, usando ls. Normalmente, os arquivos nesse diretório têm o mesmo nome (exceto para a extensão - um tem extensão .rej, um tem .failed). Se um par de arquivos com nomes semelhantes tiver o mesmo tamanho, mova o arquivo .failed para um diretório específico e deixe o .rej sozinho.

Como posso fazer isso?

    
por noitib 11.12.2013 / 00:29

1 resposta

2

Você não quer usar ls , você quer usar shell e manipulação de string :

$ for f in *.rej; do 
  size=$(stat --printf "%s" "${f%.rej}.failed") && 
  if [ $(stat --printf "%s" "$f") -eq "$size" ]; then
     mv "${f%.rej}.failed" backup/;
  fi;  done 2>/dev/null

Explicação

O comando stat --printf "%s" imprimirá o tamanho de um arquivo em bytes. ${f%.rej}.failed imprimirá qualquer que seja o nome do arquivo .rej atual, mas com a extensão .failed em vez da .rej . Se esse arquivo existir, então size=$() sairá corretamente e o script continuará ( && ). Portanto, se o $size do arquivo .failed for o mesmo que o tamanho do arquivo .rej , o arquivo .failed será movido para o diretório backup/ .

    
por 11.12.2013 / 00:49