bash 스크립트에서 tar와 함께 find -name을 사용하면 내가 뭘 잘못하고 있는 걸까요?

bash 스크립트에서 tar와 함께 find -name을 사용하면 내가 뭘 잘못하고 있는 걸까요?

bash스크립트 사용 방법을 배우려고 노력 중입니다 . Google에서 답변을 찾았지만 내 문제에 대한 답변을 찾을 수 없습니다.

스크립트는 다음과 같습니다.

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

이것을 실행하면 가 생성되지 않으므로 backuplist.txt와 함께 사용할 결과가 없습니다 tar.

파이프라인에서 find -iname직접 사용하려고 시도했지만 방금 응답을 받았습니다 .tar-iname command does not exist

find터미널에서 먼저 출력한 다음 사용하면 tar작동합니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까?

여기에 이미지 설명을 입력하세요

답변1

이 스크립트에는 두 가지 주요 문제가 있습니다.

  1. 경로는 상대적입니다. 이는 실행 시 다음 home/pi항목이 존재한다고 가정함을 의미합니다.현재 디렉터리. home/pi스크립트 의 모든 인스턴스를 로 변경해야 한다는 느낌이 듭니다 /home/pi.

  2. tar명령은 아마도 파일의 파일을 백업하기 위한 것입니다 backuplist.txt. 지금 작성된 방식으로 파일 자체만 tar포함하는 아카이브를 얻게 됩니다. backuplist.txt만약 당신이 그 글을 읽으려고 했다면내용물해당 파일의 tar -zcvf "$DESDIR/$FILENAME" -T "$SRC".

  3. 스크립트에는 따옴표가 없는 변수도 있습니다.

내 생각에 당신이 원하는 것은 다음과 같습니다.

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

명령 줄 /home/pi의 는 find대략적인 추측입니다. 그것이 없으면 GNU는 find현재 디렉토리를 사용할 것이라고 가정합니다.

답변2

나는 이 약간 다른 스크립트가 파일 목록을 tar.

나는 변수가 사용되는 곳을 인용하고 백틱을 `...`현대적인 $(...)구조로 대체했습니다.

/마지막으로, 사용한 경로가 존재할 수 있도록 이것이 에서 실행되기를 원한다고 가정했습니다 .

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

$SRC백업 프로세스 중에 파일 목록을 생성할 필요가 없다면 참조하는 두 줄을 완전히 생략할 수 있습니다 .

관련 정보