Comprimir todos os arquivos que contêm uma string específica

2

Como você pode compactar todos os arquivos em um diretório que contenha a palavra "compactar" em qualquer lugar dentro de seu conteúdo?

    
por Prady 09.02.2014 / 09:43

1 resposta

1

Você pode fazer:

cd directory
grep -Fl -Z compress | xargs -0 compress

e substitua o segundo compress (o argumento para xargs ) por gzip com bzip2 ou xz para obter uma compactação cada vez melhor na maioria dos arquivos.

A opção -F para grep usa strings fixas, -l apenas lista os nomes dos arquivos correspondentes e -Z coloca um byte zero entre os nomes de arquivos (portanto, trata espaços e novas linhas em nomes de arquivos). xargs , em seguida, passa isso para compress como argumentos de linha de comando.

Da página man de grep :

-F, --fixed-strings
       Interpret PATTERN as a  list  of  fixed  strings,  separated  by
       newlines,  any  of  which is to be matched.  (-F is specified by
       POSIX.)

-l, --files-with-matches
       Suppress  normal  output;  instead  print the name of each input
       file from which output would normally have  been  printed.   The
       scanning  will  stop  on  the  first match.  (-l is specified by
       POSIX.)

-Z, --null
       Output  a  zero  byte  (the  ASCII NUL character) instead of the
       character that normally follows a file name.  For example,  grep
       -lZ  outputs  a  zero  byte  after each file name instead of the
       usual newline.  This option makes the output  unambiguous,  even
       in the presence of file names containing unusual characters like
       newlines.  This option can  be  used  with  commands  like  find
       -print0,  perl  -0,  sort  -z, and xargs -0 to process arbitrary
       file names, even those that contain newline characters.
    
por 09.02.2014 / 10:00