スクリプトの使い方を学びようとしています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つの主な問題があります。
パスは相対的です。つまり、実行時に次の
home/pi
ものがあるとします。現在のディレクトリ。home/pi
スクリプトのすべてのインスタンスを/home/pi
。このコマンドは、ファイル内のファイルを
tar
バックアップするためのものです。backuplist.txt
今作成された方法では、tar
ファイル自体のみを含め、他のものは含まないアーカイブを取得します。backuplist.txt
読みたいならコンテンツこのファイルの場合tar -zcvf "$DESDIR/$FILENAME" -T "$SRC"
。スクリプトには引用符のない変数もあります。
私の考えでは、あなたが欲しいのがこれです。
#!/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つの参照行を完全に省略できます。