backup programas

1. backup programas

diêgo
soldadolinux

(usa Linux Mint)

Enviado em 10/01/2015 - 12:34h

Pessoal estou querendo fazer algo tipo apt-get -d install "programa e depedências" redirecionando esse pacotes .deb que vão ficar em /var/cache/apt/archives para /home/programa fiz um filtro, quero pegar o resultado desse filtro e executar pelo script mesmo isso é possível? vejam:
#!/bin/bash
echo 'digite o nome do programa'
read x
apt-get clean ; apt-get update ; apt-cache depends "$x" | grep "Depende" | cut -c 12- | tr '\n' ' ' | sed '1s/^/apt-get -d install /'

#depois de tudo baixado
mkdir /home/programas ; cp /var/cache/apt/archives/* /home/programa


  


2. Re: backup programas

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/01/2015 - 00:06h

Não consegui entender muito bem o que para acontecer mas vamos tentar:

soldadolinux escreveu:

Pessoal estou querendo fazer algo tipo apt-get -d install "programa e depedências" redirecionando esse pacotes .deb para /home/programa mas travei nessa linha não consigo progredir o sed não aceita '1s/$/"$x"/' alguém pode me ajudar.

#!/bin/bash
echo 'digite o nome do programa'
read x
apt-get update ; apt-cache depends "$x" | grep "Depende" | cut -c 12- | tr '\n' ' ' | sed '1s/^/apt-get -d install /' | sed '1s/$/"$x"/'


Destrinchando a última linha de comando tempo:

apt-cache depends "$x" | # roda o apt-cache depends usando como argumento o
# conteúdo "$x" (não faço a menor ideia do que sai
# daí mas tudo bem :P)

grep "Depende" | # procura a regexp "Depende" na saída do apt-cache

cut -c 12- | # corta tudo a partir do décimo segundo caractere até o fim da
# linha

tr '\n' ' '| # translitera quebras de linha por espaços, humm ..., assumo
# que há um ou mais linhas com a regexp "Depende" e você deseja
# concatenar tudo numa linha usando caracteres de espaço ...

sed '1s/^/apt-get -d install /' | # na primeira linha, adiciona a string
# "apt-get -d install " no início; por
# conta do comando 'tr' anterior, você
# só tem uma linha aqui e sem quebra de
# linha no final, em outras palavras
# 'wc -l' seria igual a 0.

sed '1s/$/"$x"/' # na primeira linha, apensa a string '"$x"' (sem os
# apóstrofos) literalmente ao final da linha

Acho que o seu objetivo era substituir pelo conteúdo de $x, correto? Os apóstrofos são exatamente para inibir as expansões do shell, para usar a variável, você precisa deixar o shell expandir a variável:

sed 's/$/'"$x"'/'

Se tiver interesse em otimizar esse código, removendo esse absurdo de pipes, por exemplo, envie um exemplo do que sai do comando 'apt-cache depends "$x"' e um exemplo de como deve ficar no final. Do contrário, envie este último parágrafo para /dev/null :P



3. Re: backup programas

diêgo
soldadolinux

(usa Linux Mint)

Enviado em 11/01/2015 - 11:50h

textmode escreveu:

Não consegui entender muito bem o que para acontecer mas vamos tentar:

soldadolinux escreveu:

Pessoal estou querendo fazer algo tipo apt-get -d install "programa e depedências" redirecionando esse pacotes .deb para /home/programa mas travei nessa linha não consigo progredir o sed não aceita '1s/$/"$x"/' alguém pode me ajudar.

#!/bin/bash
echo 'digite o nome do programa'
read x
apt-get update ; apt-cache depends "$x" | grep "Depende" | cut -c 12- | tr '\n' ' ' | sed '1s/^/apt-get -d install /' | sed '1s/$/"$x"/'


Destrinchando a última linha de comando tempo:

apt-cache depends "$x" | # roda o apt-cache depends usando como argumento o
# conteúdo "$x" (não faço a menor ideia do que sai
# daí mas tudo bem :P)

grep "Depende" | # procura a regexp "Depende" na saída do apt-cache

cut -c 12- | # corta tudo a partir do décimo segundo caractere até o fim da
# linha

tr '\n' ' '| # translitera quebras de linha por espaços, humm ..., assumo
# que há um ou mais linhas com a regexp "Depende" e você deseja
# concatenar tudo numa linha usando caracteres de espaço ...

sed '1s/^/apt-get -d install /' | # na primeira linha, adiciona a string
# "apt-get -d install " no início; por
# conta do comando 'tr' anterior, você
# só tem uma linha aqui e sem quebra de
# linha no final, em outras palavras
# 'wc -l' seria igual a 0.

sed '1s/$/"$x"/' # na primeira linha, apensa a string '"$x"' (sem os
# apóstrofos) literalmente ao final da linha

Acho que o seu objetivo era substituir pelo conteúdo de $x, correto? Os apóstrofos são exatamente para inibir as expansões do shell, para usar a variável, você precisa deixar o shell expandir a variável:

sed 's/$/'"$x"'/'

Se tiver interesse em otimizar esse código, removendo esse absurdo de pipes, por exemplo, envie um exemplo do que sai do comando 'apt-cache depends "$x"' e um exemplo de como deve ficar no final. Do contrário, envie este último parágrafo para /dev/null :P

Éo seguinte com o comando read pego o que o usuário digita e guardo numa variável "$x" com esse filtro que fiz ele fica assim, exemplo com o vim :
apt-get -d install (todas as dependencias do vim + problema sem o pacote do vim ) (><)
apt-get -d install vim-common vim-runtime libacl1 libc6 libgpm2 libpython2.7 libselinux1 libtinfo5

e eu quero que fique assim para depois pegar essa linha e executar não sei se isso é possível
apt-get -d install vim-common vim-runtime libacl1 libc6 libgpm2 libpython2.7 libselinux1 libtinfo5 vim

esqueci de dizer antes de tudo no começo do script tem um apt-get clean para depois no final
já baixado os pacotes.deb executar esses comandos:
mkdir /home/programa ; cp /var/cache/apt/archives/* /home/programa

resumindo o que eu quero fazer tipo echo "$x" para mostrar o nome do programa no final do filtro que fiz e executar essa linha espero que tenha me entendido :)






4. Re: backup programas

diêgo
soldadolinux

(usa Linux Mint)

Enviado em 12/01/2015 - 12:41h

textmode escreveu:

soldadolinux escreveu:

Éo seguinte com o comando read pego o que o usuário digita e guardo numa variável "$x" com esse filtro que fiz ele fica assim, exemplo com o vim :
apt-get -d install (todas as dependencias do vim + problema sem o pacote do vim ) (><)
apt-get -d install vim-common vim-runtime libacl1 libc6 libgpm2 libpython2.7 libselinux1 libtinfo5

e eu quero que fique assim para depois pegar essa linha e executar não sei se isso é possível


Sendo um comando válido, ou coloque-o ele numa variável ou grave-o em um arquivo. Se for utilizar variável, basta fazer:

$variavel

em alguns casos é necessário usar eval. De qualquer forma, ainda pode-se tentar 'echo "$variavel" | bash'.

Mas se for um arquivo:

bash arquivo


apt-get -d install vim-common vim-runtime libacl1 libc6 libgpm2 libpython2.7 libselinux1 libtinfo5 vim


Faltou o exemplo de como é a saída do 'apt-cache depends $x'. Eu não sei de cor como é a saída desse comando e não consigo imaginar uma solução.


esqueci de dizer antes de tudo no começo do script tem um apt-get clean para depois no final já baixado os pacotes.deb executar esses comandos:
mkdir /home/programa ; cp /var/cache/apt/archives/* /home/programa


Chute: você intencionar poder ser capaz de replicar a instalação em outras máquinas sem acesso a web. Correto?


resumindo o que eu quero fazer tipo echo "$x" para mostrar o nome do programa no final do filtro que fiz e executar essa linha espero que tenha me entendido :)


Minha maior dificuldade em entender se deve ao fato de não ter um debian fácil para testar "o que sai" do 'apt-cache dependes $x'

Algumas considerações:

- As resolução de dependências é dinâmica. Isso quer dizer que versões diferentes do programa alvo poder ter diferentes dependências ou por modificações vindas do desenvolvedor do pacote ou por mudanças internas do Debian na segmentação dos pacotes. Em outras palavras, você pode ter problemas recursivos e uma vida útil muito curta para seu script.

- Se o problema é apenas usar o apt-get de forma não interativa, respondendo yes para tudo, por exemplo, deve existir opções de linha de comando e se não tiver, pode-se tentar usar construções com "echo | apt-get" (não se se funciona, usa-se com telnet e ftp às vezes), ou ainda utilizar o 'expect'. De qualquer forma, deve existir o modo Debian de resolver isto.

- Se o meu chute procede, deve ter o jeito Debian de resolver isto também que provavelmente não envolve desenvolvimento de scripts.

É rapaz eu quero fazer isso pq um colega meu disse que não da p/levar programas linux no pendriver aí tive essa idéia pq ele da um dpkg -i na pasta e instala tudo, a saída do comando apt-cache depends vim é essa:

vim
Depende: vim-common
Depende: vim-runtime
Depende: libacl1
Depende: libc6
Depende: libgpm2
Depende: libpython2.7
Depende: libselinux1
Depende: libtinfo5
Sugere: <ctags>
exuberant-ctags
Sugere: vim-doc
Sugere: vim-scripts

o que eu fiz foi filtrar essa saída mas filtrando essa saída o nome "vim" que também está na variável "$x" teria que aparecer na linha apt-get -d install ... mas não aparece, só falta isso p/eu concluir olha como o script tá agora aliás vlw pela dicas cara obg. pela ajuda :)

&#65279;#!/bin/bash
echo 'digite o nome do programa e tecle enter em /home/pro estarão os pacotes.deb'
read x
touch z ; apt-get clean ; apt-get update ; apt-cache depends "$x" | grep "Depende" |
cut -c 12- | tr '\n' ' ' | sed '1s/^/apt-get\ -d\ install\ /' >> z ; chmod +x z ; bash z
mkdir /home/pro ; mv /var/cache/apt/archives/*.deb /home/pro






5. Re: backup programas

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/01/2015 - 16:13h

soldadolinux escreveu:

É rapaz eu quero fazer isso pq um colega meu disse que não da p/levar programas linux no pendriver aí tive essa idéia pq ele da um dpkg -i na pasta e instala tudo, a saída do comando apt-cache depends vim é essa:

vim
Depende: vim-common
Depende: vim-runtime
Depende: libacl1
Depende: libc6
Depende: libgpm2
Depende: libpython2.7
Depende: libselinux1
Depende: libtinfo5
Sugere: <ctags>
exuberant-ctags
Sugere: vim-doc
Sugere: vim-scripts

o que eu fiz foi filtrar essa saída mas filtrando essa saída o nome "vim" que também está na variável "$x" teria que aparecer na linha apt-get -d install ... mas não aparece, só falta isso p/eu concluir olha como o script tá agora aliás vlw pela dicas cara obg. pela ajuda :)

##!/bin/bash
echo 'digite o nome do programa e tecle enter em /home/pro estarão os pacotes.deb'
read x
touch z ; apt-get clean ; apt-get update ; apt-cache depends "$x" | grep "Depende" |
cut -c 12- | tr '\n' ' ' | sed '1s/^/apt-get\ -d\ install\ /' >> z ; chmod +x z ; bash z
mkdir /home/pro ; mv /var/cache/apt/archives/*.deb /home/pro




Vamos resolver o problema do 'apt-get -d install', depois você procura uma forma "debian" de resolver isto e caso, encontre, poste aqui porque eu também não sei :P

Segue algumas opções e você escolhe a que gostar mais:

1. sed:

apt-cache depends "$x" | sed '/^\s*Depende:\s\(\S\+\)$/{s//\1/;H};$!d;${g;s/\n/ /g;s/^\s*/apt-get -d install /;s/\s*$/ '"$x"'/}' 


2. awk:

apt-cache depends "$x" | awk -v x=$x -F '[\t ]*Depende:[\t ]+' 'NF==2{s=s" "$2}END{print "apt-get -d install "s" "x}' 


3. puro shell-script (acho que é o mais legível até aqui ...):

apt-cache depends "$x" |
(while IFS=': ' read str pacote; do
if test "$str" == 'Depende'; then
s=" ${s} ${pacote}"
fi
done
echo 'apt-get -d install '$s $x
)


4. Completando a sua versão:

Sem modificar nada, adicione um último pipe:

| sed 's/\s*$/ '"$x"'\n/' 


que insere o conteúdo de "$x" mais uma quebra de linha (para evitar outros problemas).



6. Re: backup programas

diêgo
soldadolinux

(usa Linux Mint)

Enviado em 12/01/2015 - 22:45h

textmode escreveu:

soldadolinux escreveu:

É rapaz eu quero fazer isso pq um colega meu disse que não da p/levar programas linux no pendriver aí tive essa idéia pq ele da um dpkg -i na pasta e instala tudo, a saída do comando apt-cache depends vim é essa:

vim
Depende: vim-common
Depende: vim-runtime
Depende: libacl1
Depende: libc6
Depende: libgpm2
Depende: libpython2.7
Depende: libselinux1
Depende: libtinfo5
Sugere: <ctags>
exuberant-ctags
Sugere: vim-doc
Sugere: vim-scripts

o que eu fiz foi filtrar essa saída mas filtrando essa saída o nome "vim" que também está na variável "$x" teria que aparecer na linha apt-get -d install ... mas não aparece, só falta isso p/eu concluir olha como o script tá agora aliás vlw pela dicas cara obg. pela ajuda :)

##!/bin/bash
echo 'digite o nome do programa e tecle enter em /home/pro estarão os pacotes.deb'
read x
touch z ; apt-get clean ; apt-get update ; apt-cache depends "$x" | grep "Depende" |
cut -c 12- | tr '\n' ' ' | sed '1s/^/apt-get\ -d\ install\ /' >> z ; chmod +x z ; bash z
mkdir /home/pro ; mv /var/cache/apt/archives/*.deb /home/pro




Vamos resolver o problema do 'apt-get -d install', depois você procura uma forma "debian" de resolver isto e caso, encontre, poste aqui porque eu também não sei :P

Segue algumas opções e você escolhe a que gostar mais:

1. sed:

apt-cache depends "$x" | sed '/^\s*Depende:\s\(\S\+\)$/{s//\1/;H};$!d;${g;s/\n/ /g;s/^\s*/apt-get -d install /;s/\s*$/ '"$x"'/}' 


2. awk:

apt-cache depends "$x" | awk -v x=$x -F '[\t ]*Depende:[\t ]+' 'NF==2{s=s" "$2}END{print "apt-get -d install "s" "x}' 


3. puro shell-script (acho que é o mais legível até aqui ...):

apt-cache depends "$x" |
(while IFS=': ' read str pacote; do
if test "$str" == 'Depende'; then
s=" ${s} ${pacote}"
fi
done
echo 'apt-get -d install '$s $x
)


4. Completando a sua versão:

Sem modificar nada, adicione um último pipe:

| sed 's/\s*$/ '"$x"'\n/' 


que insere o conteúdo de "$x" mais uma quebra de linha (para evitar outros problemas).

Funcionou valeu mesmo p/ajuda mas realmente é complicado se um ou alguns dos pacotes já estiverem instalado o apt-get -d install diz: pacote tal já é a versão mais nova e não baixa resumindo carregar programas linux no pendriver só baixando no http://www.appnr.com/ mesmo :(





7. Substiuir PIPE ( | ) por quebra de linha

José Eduardo Siqueira Baum
jsbaum84

(usa Debian)

Enviado em 16/10/2017 - 11:30h

Bom dia estou tendo dificuldade em substituir | por quebra de linha,
esse foi o comando que inseri
sed 's/\|/\\n/g'
e não retorna nada para mim!?


8. Re: backup programas

diêgo
soldadolinux

(usa Linux Mint)

Enviado em 30/01/2018 - 20:18h

jsbaum84 escreveu:

Bom dia estou tendo dificuldade em substituir | por quebra de linha,
esse foi o comando que inseri
sed 's/\|/\\n/g'
e não retorna nada para mim!?


Olá você pode substituir o "/" do sed por outro caracter ex: sed -i "s,|,\n,g"








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts