Al usar find -name con tar en un script bash, ¿qué estoy haciendo mal?

Al usar find -name con tar en un script bash, ¿qué estoy haciendo mal?

Estoy intentando aprender a utilizar bashscripts; Busqué respuestas en Google pero no encuentro ninguna respuesta a mi problema.

El guión se ve así:

#!/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

cuando ejecuto esto, no crea, backuplist.txtpor lo que no hay ningún resultado para usar tar.

Intenté usarlo find -inamedirectamente taren una tubería pero recién obtuve la respuesta -iname command does not exist.

Cuando uso findla salida primero en la terminal y luego tarla uso, funciona.

¿Qué estoy haciendo mal?

ingrese la descripción de la imagen aquí

Respuesta1

Hay dos problemas principales con este script:

  1. Los caminos son relativos. Esto significa que cuando lo ejecuta, se supone que home/piexiste en eldirectorio actual. Tengo la sensación de que todas las instancias de home/pien el script deberían cambiarse a /home/pi.

  2. El tarcomando probablemente esté destinado a hacer una copia de seguridad de los archivos del backuplist.txtarchivo. Tal como está escrito ahora, obtendrá un tararchivo que contiene el backuplist.txtarchivo en sí y nada más. Si quisieras leer elcontenidode ese archivo, use tar -zcvf "$DESDIR/$FILENAME" -T "$SRC".

  3. También hay variables sin comillas en el guión.

Esto es lo que creo que quieres:

#!/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"

Lo /home/pide la findlínea de comando es una suposición descabellada. Sin él, supongo que GNU findusaría el directorio actual.

Respuesta2

Creo que este script ligeramente diferente abordará su deseo original de tener la lista de archivos directamente en tar.

Cité variables donde se usan y reemplacé las comillas invertidas `...`con la $(...)construcción moderna.

Finalmente, asumí que desea que esto se ejecute desde /, para que las rutas que ha utilizado puedan 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 -

Puede omitir por completo las dos líneas que hacen referencia $SRCsi no necesita crear la lista de archivos durante el proceso de copia de seguridad.

información relacionada