Como sempre, tenha cuidado com grep -r
. -r
não é uma opção padrão, e em algumas implementações como todas as versões muito recentes do GNU grep
, segue links simbólicos ao descer a árvore de diretórios, o que geralmente não é o que você quer e pode ter implicações severas se, por exemplo há um link simbólico para "/" em algum lugar na árvore de diretórios.
Na filosofia Unix, você usa um comando para procurar diretórios por arquivos e outro para ver seu conteúdo.
Usando as ferramentas do GNU, eu faria:
xargs -r0 --arg-file <(find . -type f -exec grep -lZi string {} +
) mv -i --target-directory /dest/dir
Mas, mesmo assim, tenha cuidado com as condições de corrida e possíveis problemas de segurança, se você executá-lo como um usuário em um diretório gravável por outro usuário.