msoliver
(usa Debian)
Enviado em 20/12/2021 - 18:31h
fabianox11 escreveu:
msoliver escreveu:
fabianox11 escreveu:
Caros boa tarde,
Me desculpem antecipadamente a forma da postagem contendo 2 dúvidas no mesmo tópico e se puderem esclarecer, agradeço.
Dúvida 1)
Tenho 1 diretório contendo vários arquivos e alguns com as mesmas iniciais e mesma extensão. Ex.: M20*.TXT, variando o que está em *(asterisco). Como fazer para que ele copie estes arquivos M20*.TXT para outro diretório, porem inserindo uma palavra qualquer antes do nome original, como por exemplo: ARQ-M20*.TXT. Gostaria de um auxilio para entender como fazer este procedimento.
Dúvida 2) Dentro deste mesmo diretório preciso procurar por algumas palavras-chaves nos arquivos e copiar somente o que encontrar a busca.
Por exemplo: grep "termo-de-procura" * .
Ele me exibe 5 arquivos encontrados e, a partir deste resultado, copiá-los para o diretório de destino.
Desde já agradeço e mais uma vez desculpas no modo da postagem.
Fabiano 12
Dúvida 1)
Boa noite Fabiano, segue exemplo:
dir_origem="/Diretório_Origem/"
dir_destino="Diretório_Destino"
for arq in ${dir_origem}/M20*.txt ;do
#Se os nomes estiverem de acordo, tire o echo e as aspas duplas #
echo "cp ${arq} ${dir_destino}/ARQ_${arq/$dir_origem\/}";
done
---------------------------------------------------------------------------------------
Com awk:
Testes:
ls -1 /DIRETÓRIO/M20*.txt|awk -F"/" '{system("echo cp "$0" /Dir/Destino/ARQ_"$NF)}'
Copiando
ls -1 /DIRETÓRIO/M20*.txt|awk -F"/" '{system("cp "$0" /Dir/Destino/ARQ_"$NF)}'
Dúvida 2)
grep -r "termo-de-procura" Diretório >> arqs.txt
Verifique se tem arquivos duplicados em arqs.txt.
Faça um laço, leia linha a linha de arqs.txt,
pegando o nome do arquivo, 1º campo,
só fazer a cópia.....
------------------------------------------------------------------------------------------
Não verifica se tem arqs repetidos
grep -r "pattern" Diretório/|awk -F":" '{system("cp "$1" /Novo_DIR/"$2)}'
#Verifica
grep -r "pattern" /Diretório/|awk -F"[/:]" '!X[$2]++{sub(":"$3,"",$0);system("cp "$0" /Novo_DIR/"$2)}'
______________________________________________________________________
Importante:
lynx --dump
https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando:
ACIMA , faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________
Bom dia Marcelo,
Todas as sugestões funcionaram perfeitamente.
Porém, se puder esclarecer a sintaxe dos comandos abaixo, até para que possa ter um entendimento de funcionamento, agradeço.
Sintaxe1: ls -1 /DIRETÓRIO/M20*.txt|awk -F"/" '{system("cp "$0" /Dir/Destino/ARQ_"$NF)}'
Sintaxe2: grep -r "pattern" /Diretório/|awk -F"[/:]" '!X[$2]++{sub(":"$3,"",$0);system("cp "$0" /Novo_DIR/"$2)}'
Sds,
Fabiano 12
----------------------------------------------------------------------------------------------------------------
Boa tarde Fabiano.
Sintaxe 01:
O awk, usando o "Separador de Campo" "/" (-F"),
e a função system(), "monta" e executa o comando "cp",
Usando $0 como origem e /Dir/Destino/ARQ_"$NF) como destino,
onde $0 é a linha inteira,
$NF, é o ultimo campo.
#A função system(), executa comandos externos:
+1 Exemplo:
printf "%s\n" {1..12}|awk '{printf "Mês:%02d\n" ,$1;system("cal -m"$1)}'
----------------------------------------------------------------------------------------------------------------
Sintaxe 02:
Separador de campo,
-F"[/:]",
o "parte" do awk, "!X[$2]++", checa se o campo $2 NÃO existe na "matriz/array", o detalhe é a "!", negação.....
$2 é o "
Nome do Arquivo "
O "sub(":"$3,"",$0)", elimina ":"$3, do campo $0
$3 é a linha 'casada' no grep, o que não nos interessa....
Resumindo:
Se $2 não existe na Matrix, retire ":$3" de $0, e execute o comando cp ,
system("cp "$0" /Novo_DIR/"$2)
----------------------------------------------------------------------------------------------------------------
awk eliminando linhas duplicadas:
echo -e "Um\nDois\nTrês\nDois\nUm\nTrês\nTrês\nQuatro"|awk '!X[$1]++{printf "%s ",$0}'
Um Dois Três Quatro
É isso....
______________________________________________________________________
Importante:
Se te AJUDEI, me AJUDE,
MARCANDO a MELHOR RESPOSTA.
______________________________________________________________________
lynx --dump
https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando:
ACIMA , faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________