Sobre equação de atributos de arquivo no comando “ls”

2

Eu tenho uma pasta na qual existem milhares de imagens. Dessas mil imagens, quero reunir todas aquelas imagens cujos atributos "Última criação" e "Última modificação" são exatamente iguais. (Em outras palavras, quero separar todas as imagens que eu nunca renomei, por exemplo)

Existe uma maneira de fazer isso do terminal?

estes são os dois comandos que eu quero concatenar ls -tU lista o arquivo por data de criação. (Estou em um mac) ls -lt lista o arquivo por data de modificação

tal que eu quero "Listar arquivos cuja data foi criada = data de modificação"

    
por user607694 18.06.2016 / 17:10

2 respostas

2

Você pode fazer isso usando o comando stat . Aqui está um script simples que imprime os nomes dos arquivos, com algumas permissões para espaços em branco incorporados:

#!/bin/sh
find $* -exec stat -f '%m %B %N' {} \; | \
awk '$1 == $2 { \
  s=length($1)+length($2)+3;
  $0 = substr($0,s);
  print $0;
}'

Os %m e %B são respectivamente os tempos modificados e nascimento (que parecem ser os pedidos). O script os imprime como números decimais, passando para awk , que imprime apenas as linhas em que esses números são iguais. Como seus nomes de arquivos podem ter espaços em branco incorporados, o restante do script remove os valores de registro de data e hora da entrada e imprime o restante da linha.

Leitura adicional:

por 18.06.2016 / 17:41
0

Eu me senti entediado e usei para tal script também, então mudei o Thomas Dickey de pequenas maneiras, não de maneira drástica, mas apenas por exemplo. para que você possa lidar com todos os tipos de nomes de arquivos (mesmo aqueles com novas linhas) e alterar facilmente o separador entre os nomes dos arquivos (por exemplo, apenas definir ORS to "xargs -z …" para encaminhá-lo para --printf )

#!/bin/sh
find "${1-.}" -type f -exec stat --printf '%n
#!/bin/sh
find "${1-.}" -type f -exec stat --printf '%n%pre%%Y %W%pre%' -- {} \; | \
awk 'BEGIN {
  RS  = "%pre%";
  FS  =  " ";
  ORS = "\n";
} {
  if (NR % 2) {
    f = $0;
  } else if ($1 == $2) {
    print f;
  }
}'
%Y %W%pre%' -- {} \; | \ awk 'BEGIN { RS = "%pre%"; FS = " "; ORS = "\n"; } { if (NR % 2) { f = $0; } else if ($1 == $2) { print f; } }'

Não totalmente POSIX por causa de, e. %code% .

    
por 18.06.2016 / 20:39

Tags