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.