Estoy intentando aprender a utilizar bash
scripts; 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.txt
por lo que no hay ningún resultado para usar tar
.
Intenté usarlo find -iname
directamente tar
en una tubería pero recién obtuve la respuesta -iname command does not exist
.
Cuando uso find
la salida primero en la terminal y luego tar
la uso, funciona.
¿Qué estoy haciendo mal?
Respuesta1
Hay dos problemas principales con este script:
Los caminos son relativos. Esto significa que cuando lo ejecuta, se supone que
home/pi
existe en eldirectorio actual. Tengo la sensación de que todas las instancias dehome/pi
en el script deberían cambiarse a/home/pi
.El
tar
comando probablemente esté destinado a hacer una copia de seguridad de los archivos delbackuplist.txt
archivo. Tal como está escrito ahora, obtendrá untar
archivo que contiene elbackuplist.txt
archivo en sí y nada más. Si quisieras leer elcontenidode ese archivo, usetar -zcvf "$DESDIR/$FILENAME" -T "$SRC"
.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/pi
de la find
línea de comando es una suposición descabellada. Sin él, supongo que GNU find
usarí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 $SRC
si no necesita crear la lista de archivos durante el proceso de copia de seguridad.