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直接withを使ってみましたが、ちょうど答えを受けました。tar-iname command does not exist

ターミナルで最初に出力を使用してfindから使用するとtar機能します。

私は何が間違っていましたか?

ここに画像の説明を入力してください。

答え1

このスクリプトには2つの主な問題があります。

  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バックアッププロセス中にファイルリストを作成する必要がない場合は、これら2つの参照行を完全に省略できます。

関連情報