com find
:
find . -type f -name '*.out' -exec grep -q 'PATTERN' {} ';' \
-exec sh -c 'cp "$1" "${1%.out}.gdx" /somewhere' sh {} ';'
Alternativamente:
find . -type f -name '*.out' -exec grep -q 'PATTERN' {} ';' \
-exec sh -c 'for name do cp "$name" "${name%.out}.gdx" /somewhere; done' sh {} +
Isso localizaria todos os arquivos na pasta atual ou abaixo, cujos nomes terminam com .out
. Se um arquivo .out
tiver uma linha correspondente a PATTERN
, o arquivo .gdx
no mesmo diretório, com o mesmo prefixo de nome do arquivo .out
, será copiado para /somewhere
junto com o arquivo .out
.
Nenhum teste é feito para saber se já existe uma entrada de diretório existente em /somewhere
com o mesmo nome dos arquivos sendo copiados ou se o arquivo .gdx
realmente existe para começar.
Veja também: