ファイルを最後に変更されたプロパティと現在の日付と比較する必要があるバックアップスクリプト(bashシェル - Fedora - VMware)を操作しています。最後の変更日がスクリプトの最後の実行日より前の場合は、それをバックアップする必要があります。戻る。
私はいくつか(awk、stat、およびgrep)を試しましたが、比較することができ、ファイルをバックアップする必要があるかどうかをスクリプトが決定できるようにすることはできません。
2つのケースステートメントに集中してください。
#! /bin/sh
echo "welcome to backup pro"
echo -e "\n 1:Full \n 2:Incremental"
echo "Enter your choice"
read choice
echo "Enter the files to be backup"
read filetype
echo "Enter the destination folder"
read destination
case $choice in
1)
echo "The selected backup type is Full backup"
echo "Backing up $filetype files.."
sleep 1
cp *.$filetype /home/uone/backup_folder
tar -zcvf archive_backup_folder.tar.gz backup_folder/ 2>full-error.log
mv archive_backup_folder.tar.gz /home/uone/backup_folder; cd /home/uone/backup_folder ; rm *.$filetype
sleep 1
tail full-error.log
break
;;
2)
echo "The backup you chose is Increment"
ls -l | awk 'END {print $9 "\t" $8}'
b=data "%H%M%S"
if [ $a -lt $b ];
then
echo "This is under construction"
fi
;;
esac
exit 0
答え1
stat
本当にしたい場合は、ループを使用してこれを実行できますが、次のようになります。find
上手で一行にできます。スクリプトを実行するたびに特別なタイムスタンプファイルを生成し、次を使用してそのファイルより最新/以前のすべてのファイルを選択できます。
find -name "*.$filetype" ! -newer timestamp.file
*.$filetype
これにより、パターンに基づいて名前が付けられ、!
要求に応じてタイムスタンプファイルより古い(最新のファイルの代わりに)ファイルがすべてディレクトリツリーで検索されます。より役に立つような最新のファイルが必要な場合!
。
これらのファイルが見つかったら、find
「-exec」を使用してそのファイルに対して特定のタスクを実行するように要求できます。
find -name "*.$filetype" -newer timestamp.file -exec cp '{}' "$destination" +
cp
一致するすべてのファイルを名前付きディレクトリに引数として実行し、一致するすべてのファイルを$destination
そのディレクトリにコピーします。
各スクリプトの実行が終わったら、以下を使用して比較ファイルのタイムスタンプを更新できますtouch
。
touch timestamp.file
次回使用する比較ポイントです。スクリプトの実行中にファイルが変更される可能性がある場合は、さらに注意する必要があります。最初にタイムスタンプファイルを更新し、まず古いファイルとその属性をコピーします。cp -p
、比較のために使用します(反対の場合も同様)。
-mtime
テストはタイトルのように現在の時間と比較するのに役立ちますが、実際にテキストでfind
欲しいのは、スクリプトの2つの実行間の変更を得ることだと思います。
スクリプトの圧縮、ユーザーの対話などは変更されずにそのまま維持できます。サブディレクトリではなく現在のディレクトリのファイルのみが必要な場合-maxdepth 1
。