Estou tentando aprender a usar bash
scripts; Pesquisei respostas no Google, mas não consigo encontrar nenhuma resposta para o meu problema.
O script fica assim:
#!/bin/bash
TIME=`date +%b-%d-%y`
FILENAME=backup-$TIME.tar.gz
DESDIR=home/pi/backups
SRC=home/pi/backuplist.txt
find -iname '*.orig' -o -iname '*.py' > home/pi/backuplist.txt
tar -zcvf $DESDIR/$FILENAME $SRC
quando executo isso, ele não cria, backuplist.txt
então não há resultado para usar tar
.
Tentei usar find -iname
diretamente tar
em um pipeline, mas acabei de receber a resposta -iname command does not exist
.
Quando eu uso find
a saída primeiro no terminal e depois uso tar
funciona.
O que estou fazendo de errado?
Responder1
Existem dois problemas principais com este script:
Os caminhos são relativos. Isso significa que quando você o executa, presume-se que
home/pi
existe nodiretório atual. Tenho a sensação de que todas as instâncias dohome/pi
script devem ser alteradas para/home/pi
.O
tar
comando provavelmente se destina a fazer backup dos arquivos nobackuplist.txt
arquivo. Da forma como está escrito agora, você obterá umtar
arquivo contendo obackuplist.txt
arquivo em si e nada mais. Se você pretendia ler oconteúdodesse arquivo, usetar -zcvf "$DESDIR/$FILENAME" -T "$SRC"
.Também existem variáveis sem aspas no script.
Aqui está o que acho que você quer:
#!/bin/bash
TIME="$(date +%b-%d-%y)"
FILENAME="backup-$TIME.tar.gz"
DESDIR="/home/pi/backups"
SRC="/home/pi/backuplist.txt"
find /home/pi -iname '*.orig' -o -iname '*.py' >"$SRC"
tar -zcvf "$DESDIR/$FILENAME" -T "$SRC"
O /home/pi
na find
linha de comando é um palpite. Sem ele, presumo que o GNU find
usaria o diretório atual.
Responder2
Acho que esse script um pouco diferente atenderá ao seu desejo original de ter a lista de arquivos canalizada diretamente para o arquivo tar
.
Citei as variáveis onde elas são usadas e substituí os crases `...`
pela $(...)
construção moderna.
Finalmente, presumi que você deseja que isso seja executado from /
, para que os caminhos que você usou possam existir.
#!/bin/bash
WHEN=$(date +%b-%d-%y)
FILENAME="backup-$WHEN.tar.gz"
DESDIR=/home/pi/backups
SRC=/home/pi/backuplist.txt
mkdir -p "$DESDIR"
cd /
find -iname '*.orig' -o -iname '*.py' |
tee "$SRC" |
tar zcvf "$DESDIR/$FILENAME" --no-recursion --verbatim-files-from --files-from -
Você pode omitir completamente as duas linhas de referência $SRC
se não precisar criar a lista de arquivos durante o processo de backup.