Você pode passar um diretório como um destino para grep
com -R
e um arquivo de padrões de entrada com -f
:
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. If this option is used
multiple times or is combined with the -e (--regexp) option,
search for all patterns given. The empty file contains zero
patterns, and therefore matches nothing.
-R, --dereference-recursive
Read all files under each directory, recursively. Follow all
symbolic links, unlike -r.
Então, você está procurando:
grep -Ff subset.txt -r objects/
Você pode obter a lista de arquivos correspondentes com:
grep -Flf subset.txt -r objects/
Então, se a sua lista final não for muito longa, você pode fazer:
mv $(grep -Flf subset.txt -r objects/) new_dir/
Se isso retornar um erro argument list too long
, use:
grep -Flf subset.txt -r objects/ | xargs -I{} mv {} bar/
E se os nomes dos seus arquivos puderem conter espaços ou outros caracteres estranhos, use (assumindo o GNU grep
):
grep -FZlf subset.txt -r objects/ | xargs -0I{} mv {} bar/
Finalmente, se você quiser excluir arquivos binários, use:
grep -IFZlf subset.txt -r objects/ | xargs -0I{} mv {} bar/