mova o conteúdo da pesquisa para um diretório diferente

mova o conteúdo da pesquisa para um diretório diferente

Estou no Oracle Solaris.

Estou usando:

grep "searchstring" filename.*

O comando acima retorna meu resultado de pesquisa.

Agora quero mover todos os arquivos no resultado da pesquisa acima (todos os arquivos, não o resultado da pesquisa) para um diretório específico ../mydir/.

Como posso fazer isso em um comando (pesquisar e mover ambos devem ser feitos em um comando de linha).

Responder1

De ksh, bashou /usr/xpg4/bin/sh, assumindo que os nomes dos arquivos não contenham caracteres de nova linha, você pode usar o operador split+glob na saída de grep -l( -lparaeusão os arquivos que correspondem).

Esse operador é invocado deixando osubstituição de comando( `...`ou $(...)) sem aspas. Aqui, nós o ajustamos com a $IFSvariável especial para dizer em qual caractere queremos dividir (aqui o caractere de nova linha) e desativando a globparte com set -f:

IFS='
'
set -f
mv $(set +f; grep -l searchstring filename*) ../mydir/

(restauramos globbingdentroda substituição do comando (que é executado em um subshell) para a expansão de filename*).

Você pode simplificá-lo para:

mv $(grep -l searchstring filename*) ../mydir/

Se você sabe que os nomes dos arquivos não contêm espaço, tabulação, nova linha *ou caracteres. Acima, a divisão é feita em caracteres de nova linha, espaço e tabulação (que é o valor padrão de ) e o globbing é executado em cada palavra resultante dessa divisão (mas isso não é um problema se nenhum dos nomes de arquivos contiver caracteres curinga).?[$IFS

Se você não puder garantir que os nomes dos arquivos não conterão caracteres de nova linha, você poderá usar um loop:

for f in filename*; do
  grep -q searchstring "$f" && mv "$f" ../mydir/
done

informação relacionada