Com ferramentas GNU:
grep -D skip -d skip -lZ WORD /Vinodh/*TEST* | xargs -r0 mv -vt /TEST
Observe que, se alguns desses arquivos forem links simbólicos, movê-los poderá quebrar os links.
O GNU grep
pode ignorar dispositivos / fifos com -D skip
e diretórios com -d skip
, mas não há opção para pular links simbólicos. Você precisaria de um shell onde os globs pudessem especificar tipos de arquivos como zsh
:
grep -lZ WORD /Vinodh/*TEST*(.) | xargs -r0 mv -vt /TEST
Só procuraria em arquivos regulares .
Uma alternativa é usar find
:
LC_ALL=C find /Vinodh/. ! -name . -prune \
! -name '.*' -type f -name '*TEST*' -exec grep -lZ WORD {} + |
xargs -r0 mv -t /TEST
E a variante POSIX, se você não tiver ferramentas GNU:
LC_ALL=C find /Vinodh/. ! -name . -prune \
! -name '.*' -type f -name '*TEST*' -exec grep -q {} \; \
-exec mv {} /TEST/ \;