Como verificar se faltam arquivos no sistema de arquivos ou diretório com bash (após falha)?

0

Após o sistema desmontar a partição raiz, eu detectei que alguns arquivos estão faltando no sistema de arquivos.

wifi e os ícones do gwibber desapareceram do indicador applet

Eu estou tentando verificar se outros arquivos estão faltando usando o programa ls e o programa locate , que funciona com índices de um estado anterior do sistema de arquivos.

Assim,

locate /usr/share/icons/* | xargs ls -d 2>&1 >/dev/null

serve para essa finalidade porque ls exibe uma mensagem de erro para cada arquivo inexistente localizado locate ; e eu posso contar os arquivos ausentes assim:

locate /usr/share/icons/* | xargs ls -d 2>&1 >/dev/null | wc -l

exceto no caso em que nomes de arquivos possuem espaços em branco; e, não surpreendentemente, esse é o caso do Ubuntu (OMG !! Não é mais "proibido" como nos bons e velhos tempos).

Se, por exemplo, eu usar:

locate /usr/share/* | xargs -Iñ ls -d 'ñ' 2>&1 >/dev/null

não está funcionando porque existe algum tipo de interferência na sintaxe entre os redirecionamentos das saídas padrão e o uso do parâmetro -I .

Alguém pode me ajudar com essa sintaxe ou dar outra ideia?

EDITAR .-

Eu eliminei o problema com os espaços em branco, mas não é muito elegante, assim:

locate /usr/share/* | sed -e 's/^/"/' -e 's/$/"/' | xargs ls -d 2>&1 >/dev/null|

Mas tenho certeza que deve haver muitas soluções melhores que eu estou ansioso para ler.

    
por Robert Vila 10.11.2012 / 06:14

1 resposta

0

Tanto locate como xargs têm um argumento para separar nomes de arquivos usando o caractere nulo em vez de espaço ou nova linha. Isso deve corrigir o problema com espaços em nomes de arquivos.

locate -0 /usr/share/icons/* | xargs -0 ls -d 2>&1 >/dev/null

de man locate :

   -0, --null
          Separate  the  entries  on  output using the ASCII NUL character
          instead of writing each entry on a separate line.   This  option
          is  designed  for interoperability with the --null option of GNU
          xargs(1).

de man xargs :

   --null
   -0     Input  items  are  terminated  by a null character instead of by
          whitespace, and the quotes and backslash are not special  (every
          character is taken literally).  Disables the end of file string,
          which is treated like any other  argument.   Useful  when  input
          items  might  contain  white space, quote marks, or backslashes.
          The GNU find -print0 option produces  input  suitable  for  this
          mode.
    
por lesmana 10.11.2012 / 18:56