Usando find -name com tar em um script bash, o que estou fazendo de errado?

Usando find -name com tar em um script bash, o que estou fazendo de errado?

Estou tentando aprender a usar bashscripts; 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.txtentão não há resultado para usar tar.

Tentei usar find -inamediretamente tarem um pipeline, mas acabei de receber a resposta -iname command does not exist.

Quando eu uso finda saída primeiro no terminal e depois uso tarfunciona.

O que estou fazendo de errado?

insira a descrição da imagem aqui

Responder1

Existem dois problemas principais com este script:

  1. Os caminhos são relativos. Isso significa que quando você o executa, presume-se que home/piexiste nodiretório atual. Tenho a sensação de que todas as instâncias do home/piscript devem ser alteradas para /home/pi.

  2. O tarcomando provavelmente se destina a fazer backup dos arquivos no backuplist.txtarquivo. Da forma como está escrito agora, você obterá um tararquivo contendo o backuplist.txtarquivo em si e nada mais. Se você pretendia ler oconteúdodesse arquivo, use tar -zcvf "$DESDIR/$FILENAME" -T "$SRC".

  3. 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/pina findlinha de comando é um palpite. Sem ele, presumo que o GNU findusaria 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 $SRCse não precisar criar a lista de arquivos durante o processo de backup.

informação relacionada