Como encontrar arquivos perdidos com nomes seqüenciais? [duplicado]

5

Eu tenho milhares de arquivos chamados 1.txt 2.txt e assim por diante. Alguns desses arquivos estão faltando. Qual seria a maneira mais fácil de descobrir quais arquivos estão faltando?

    
por Sofia Ontiveros 14.10.2015 / 19:34

4 respostas

6
ub=1000 # Replace this with the largest existing file's number.
seq "$ub" | while read -r i; do
    [[ -f "$i.txt" ]] || echo "$i.txt is missing"
done

Você pode encontrar facilmente o valor adequado para ub fazendo ls | sort -n ou similar. Isso depende dos arquivos que estão no formato de saída por seq , notavelmente aqui sem zeros iniciais.

    
por 14.10.2015 / 19:39
4
$ ls
1.txt  3.txt
$ seq 1 10 | xargs -I {} ls {}.txt >/dev/null
ls: cannot access 2.txt: No such file or directory
ls: cannot access 4.txt: No such file or directory
ls: cannot access 5.txt: No such file or directory
ls: cannot access 6.txt: No such file or directory
ls: cannot access 7.txt: No such file or directory
ls: cannot access 8.txt: No such file or directory
ls: cannot access 9.txt: No such file or directory
ls: cannot access 10.txt: No such file or directory
$
    
por 14.10.2015 / 19:40
2

Esta é a função que eu usarei

missing () {
  #ub gets the largest sequential number
  ub=$(ls | sort -n | tail -n 1 | xargs basename -s .txt)
  seq "$ub" | while read -r i; do
    [[ -f "$i.jpg" ]] || echo "$i.txt is missing"
  done
}
    
por 14.10.2015 / 20:33
0

Outro ( bash ):

comm -23 <(printf '%d.txt\n' {1..1000} | sort) <(ls *.txt |sort)
    
por 14.10.2015 / 21:40