Script só esta compactando formato .txt deixando o resto de fora

1. Script só esta compactando formato .txt deixando o resto de fora

Erik P. Ghijs
Good_speed

(usa Debian)

Enviado em 05/10/2021 - 18:51h

Boa noite, amigos

Fiz um script no qual ele vai buscar o arquivo na pasta especifica e depois compactar no formato bz2, o problema e que o script só esta compactando o formato .txt,
deixando de fora os outros da lista abaixo, onde eu errei?, poderia me ajudar?

Extensões:
Maps (.bsp)
Materials (.vtf, .vmt, .png, .svg)
Models (.vtx, .vvd, .mdl, .phy)
Particles (.pcf)
Sounds (.wav, .mp3, .ogg)
Fonts (.otf, .ttf)
Images (.png, .svg)


Home: /home/ogp_agent/OGP_User_Files/2


root@VPS-VM109-CLIENTE-TESTE:/home/ogp_agent/OGP_User_Files/2# ls -lha
total 152K
drwxrwx--x 10 ogp_agent ogp_agent 4,0K out 5 18:32 .
drwxr-xr-x 6 ogp_agent ogp_agent 4,0K out 2 18:36 ..
drwxr-xr-x 7 ogp_agent ogp_agent 4,0K out 2 17:59 bin
lrwxrwxrwx 1 ogp_agent ogp_agent 43 out 2 17:59 chrome.pak -> /home/ogp_agent/OGP_User_Files/1/chrome.pak
drwxr-xr-x 21 ogp_agent ogp_agent 12K out 4 17:24 csgo
drwxr-xr-x 2 ogp_agent ogp_agent 16K out 5 18:19 fastdl
-rw-r--r-- 1 ogp_agent ogp_agent 20K out 4 13:26 LOG_HOME.txt
drwxr-xr-x 2 ogp_agent ogp_agent 4,0K out 4 13:26 logs_backup
lrwxrwxrwx 1 ogp_agent ogp_agent 66 out 2 17:59 OGP_HOME_000000001_startup_scr.sh -> /home/ogp_agent/OGP_User_Files/1/OGP_HOME_000000001_startup_scr.sh
-rw-r--r-- 1 ogp_agent ogp_agent 1,1K out 4 13:26 OGP_HOME_000000002_startup_scr.sh
drwxr-xr-x 9 ogp_agent ogp_agent 4,0K out 2 17:59 platform
-rw-r--r-- 1 ogp_agent ogp_agent 0 out 4 13:44 SERVER_STOPPED
lrwxrwxrwx 1 ogp_agent ogp_agent 42 out 2 17:59 srcds.exe -> /home/ogp_agent/OGP_User_Files/1/srcds.exe
lrwxrwxrwx 1 ogp_agent ogp_agent 44 out 2 17:59 srcds_linux -> /home/ogp_agent/OGP_User_Files/1/srcds_linux
-rwxr-x--x 1 ogp_agent ogp_agent 9,7K out 2 17:59 srcds_run
drwxr-xr-x 3 ogp_agent ogp_agent 4,0K out 4 10:39 .steam
-rw-r--r-- 1 ogp_agent ogp_agent 5 out 4 13:26 steam_appid.txt
drwxr-xr-x 5 ogp_agent ogp_agent 4,0K out 2 17:59 steamapps
lrwxrwxrwx 1 ogp_agent ogp_agent 59 out 2 17:59 thirdpartylegalnotices.doc -> /home/ogp_agent/OGP_User_Files/1/thirdpartylegalnotices.doc


Script

#!/bin/bash
cd csgo/
for path in `find . -type f | egrep "^\./(maps|materials|models|resource|sound)/"`
do
if [ ! -e fastdl/$path.bz2 ]; then
DIR=$(dirname "${path}")
echo "Compressing $path"
bzip2 $path;
fi
done


A saída do script:
root@VPS-VM109-CLIENTE-TESTE:/home/ogp_agent/OGP_User_Files/2/csgo/resource# ls
bfacs.txt.bz2 csgo_german.txt.bz2 game_1bpp.ico ifm_clipscale.cur magnify.cur stubble-bold.vfont


Pode notar aqui que so txt foi compacqtado.


  


2. Re: Script só esta compactando formato .txt deixando o resto de fora

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 05/10/2021 - 20:26h


Good_speed escreveu:

Boa noite, amigos

Fiz um script no qual ele vai buscar o arquivo na pasta especifica e depois compactar no formato bz2, o problema e que o script só esta compactando o formato .txt,
deixando de fora os outros da lista abaixo, onde eu errei?, poderia me ajudar?

Extensões:
Maps (.bsp)
Materials (.vtf, .vmt, .png, .svg)
Models (.vtx, .vvd, .mdl, .phy)
Particles (.pcf)
Sounds (.wav, .mp3, .ogg)
Fonts (.otf, .ttf)
Images (.png, .svg)


Home: /home/ogp_agent/OGP_User_Files/2


root@VPS-VM109-CLIENTE-TESTE:/home/ogp_agent/OGP_User_Files/2# ls -lha
total 152K
drwxrwx--x 10 ogp_agent ogp_agent 4,0K out 5 18:32 .
drwxr-xr-x 6 ogp_agent ogp_agent 4,0K out 2 18:36 ..
drwxr-xr-x 7 ogp_agent ogp_agent 4,0K out 2 17:59 bin
lrwxrwxrwx 1 ogp_agent ogp_agent 43 out 2 17:59 chrome.pak -> /home/ogp_agent/OGP_User_Files/1/chrome.pak
drwxr-xr-x 21 ogp_agent ogp_agent 12K out 4 17:24 csgo
drwxr-xr-x 2 ogp_agent ogp_agent 16K out 5 18:19 fastdl
-rw-r--r-- 1 ogp_agent ogp_agent 20K out 4 13:26 LOG_HOME.txt
drwxr-xr-x 2 ogp_agent ogp_agent 4,0K out 4 13:26 logs_backup
lrwxrwxrwx 1 ogp_agent ogp_agent 66 out 2 17:59 OGP_HOME_000000001_startup_scr.sh -> /home/ogp_agent/OGP_User_Files/1/OGP_HOME_000000001_startup_scr.sh
-rw-r--r-- 1 ogp_agent ogp_agent 1,1K out 4 13:26 OGP_HOME_000000002_startup_scr.sh
drwxr-xr-x 9 ogp_agent ogp_agent 4,0K out 2 17:59 platform
-rw-r--r-- 1 ogp_agent ogp_agent 0 out 4 13:44 SERVER_STOPPED
lrwxrwxrwx 1 ogp_agent ogp_agent 42 out 2 17:59 srcds.exe -> /home/ogp_agent/OGP_User_Files/1/srcds.exe
lrwxrwxrwx 1 ogp_agent ogp_agent 44 out 2 17:59 srcds_linux -> /home/ogp_agent/OGP_User_Files/1/srcds_linux
-rwxr-x--x 1 ogp_agent ogp_agent 9,7K out 2 17:59 srcds_run
drwxr-xr-x 3 ogp_agent ogp_agent 4,0K out 4 10:39 .steam
-rw-r--r-- 1 ogp_agent ogp_agent 5 out 4 13:26 steam_appid.txt
drwxr-xr-x 5 ogp_agent ogp_agent 4,0K out 2 17:59 steamapps
lrwxrwxrwx 1 ogp_agent ogp_agent 59 out 2 17:59 thirdpartylegalnotices.doc -> /home/ogp_agent/OGP_User_Files/1/thirdpartylegalnotices.doc


Script

#!/bin/bash
cd csgo/
for path in `find . -type f | egrep "^\./(maps|materials|models|resource|sound)/"`
do
if [ ! -e fastdl/$path.bz2 ]; then
DIR=$(dirname "${path}")
echo "Compressing $path"
bzip2 $path;
fi
done


A saída do script:
root@VPS-VM109-CLIENTE-TESTE:/home/ogp_agent/OGP_User_Files/2/csgo/resource# ls
bfacs.txt.bz2 csgo_german.txt.bz2 game_1bpp.ico ifm_clipscale.cur magnify.cur stubble-bold.vfont


Pode notar aqui que so txt foi compactado.


Boa noite,
Vc postou a saida de:
root@VPS-VM109-CLIENTE-TESTE:/home/ogp_agent/OGP_User_Files/2# ls -lha
E o script está 'rodando' em:
cd csgo/
Não entendi...

Pela lógica do seu script, e também pelas características do 'bzip2', será criado um arquivo compactado para cada arquivo encontrado....
É isso que quer...?

O erro pode estar no egrep, que está casando somente letras minusculas.


Recomendo usar o "find com regex",
exemplo:
find ./csgo/ -type f -regextype posix-extended -regex '.*.(txt|html)$'
isso evita o pipe para o egrep
------------------------------------------------------------------------------------------
Visto que:
bzip2 and bunzip2 will by default not overwrite existing files. If you want this to happen, specify the -f flag.
O condicional não é necessário.

Minha sugestão, tudo em um arquivo:
find csgo/ -type f -regextype posix-extended -regex '.*.(php|html)$'|xargs tar -cf arquivos.tar 

Altere: (php|html), para as ext que quer fazer o backup.



______________________________________________________________________
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
______________________________________________________________________



3. Re: Script só esta compactando formato .txt deixando o resto de fora

Pedro
pedraqronca

(usa Outra)

Enviado em 05/10/2021 - 20:41h

Está meio difícil de entender seu script e a ideia por detrás... O diretório que tu fez o `ls` parece que não tem nada a ver com o segundo exemplo que tu mostra depois!

Eu não entendi se o problema é no comando `find` que não está listando os outros arquivos que tu quer, ou com o egrep, como falou o oliver, ou se é o comportamento do bzip2.

Enfim, do jeito que está fazendo, ele vai comprimir um arquivo por vez. Se quiser comprimir todos os arquivos em um só, deve primeiro `compactá-los` com o `tar` antes. Depois poderá comprimir o arquivo resultante (também poderia usar a opção bzip2 -c [arquivo], mas teria que colocar essa flag `-c` para cada um de *todos* os arquivos, mas para um script existem outras possibilidades..)

Supondo que os arquivos não tenham espaço em branco no nome, pode fazer algo assim:

tar c `find . -type f | egrep "^\./(maps|materials|models|resource|sound)/"` | bzip2 -zc > out.tbz2  


-z é para comprimir (opcional) e -c é para enviar para stdout, daí você redireciona o output para um arquivo, no caso `out.tbz2` (um arquivo tar que passou pelo bzip2).

Se tiver espaço em branco no nome, use o xargs:
find . -type f | egrep "^\./(maps|materials|models|resource|sound)/"| xargs tar c | bzip2 -zc > out.tbz2  


ADENDO

Na verdade, achei uma opção no TAR que passa os arquivos pelo Bzip2. Opção `-j`.
find . -type f | egrep "^\./(maps|materials|models|resource|sound)/"| xargs tar jcf out.tbz2  


Uma nota: se hover arquivos demais, o `xargs` pode chamar o tar duas vezes, sobrescrevendo o primeiro arquivo produzido. Nesse caso, pode-se usar o IFS para não reconhecer espaços em branco nos nomes dos arquivos como separadores:
IFS=$'\t\n'
tar jcf out.tbz2 `find . -type f | egrep "^\./(maps|materials|models|resource|sound)/"`
IFS=$' \t\n'


Mas mesmo assim, se houver um número muito grande de arquivos, tipo 100 mil arquivos, a shell não vai passar todos os nomes de arquivos pro bzip2, mas isso é um acontecimento mais normal...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts