私はPHPでこれをしたくないので、シェルスクリプトに詳しい人が助けてくれることを望んでいます。
ディレクトリを再帰的に実行し、最終更新日が特定の日付よりも大きいすべてのファイルを見つけるスクリプトが必要です。次に、パス情報を保持したままファイルをtarおよびZipします。
単純な:
find . -mtime -1 | xargs tar --no-recursion -czf myfile.tgz
find . -mtime -1
は、前日に変更された(再帰的に)現在のディレクトリ内のすべてのファイルを選択します。たとえば、分数を使用できます。
find . -mtime -1.5 | xargs tar --no-recursion -czf myfile.tgz
GNU find
がある場合、多数の関連オプションがあります。唯一の障害は、それらへのインターフェースが恒星以下であることです:
-mmin n
(変更時間(分))-mtime n
(変更時間(日))-newer file
(ファイルの変更時間より新しい変更時間)-daystart
(現在時刻から開始時刻までの開始時刻を調整します)難しい部分は、時間からの分数を決定することです。
検討する価値のある1つのオプション:touch
を使用して、必要な変更タイムスタンプを持つファイルを作成します。次に、find
を-newer
とともに使用します。
touch -t 200901031231.43 /tmp/wotsit
find . -newer /tmp/wotsit -print
rm -f /tmp/wotsit
これにより、2009-01-03T12:31:43より新しいファイルが検索されます。明らかに、スクリプトでは、/tmp/wotsit
は、一意にするためのPIDまたはその他の値を持つ名前になります。また、ユーザーが割り込んだ場合でも削除されるようにするため、trap
などがあります。
これはtarで直接行うことができ、さらに優れています。
tar -N '2014-02-01 18:00:00' -jcvf archive.tar.bz2 files
これは、2014年1月1日18:00:00より新しいファイルを圧縮するようにtarに指示します。
これはいくつかのファイルに対して機能します。パスにスペースが含まれている場合に備えて、「-print0」と「xargs -0」を含めます。この例では、過去7日間に変更されたファイルを検索します。過去7日間より前に変更されたものを見つけるには、「+ 7」を使用します。
find . -mtime -7 -print0 | xargs -0 tar -cjf /foo/archive.tar.bz2
このページ が警告するように、多くの引数がある場合、xargsはtarコマンドを複数回実行する可能性があり、「-c」フラグは問題を引き起こす可能性があります。その場合、これが必要になります:
find . -mtime -7 -print0 | xargs -0 tar -rf /foo/archive.tar
Zip圧縮されたtarアーカイブをtarで更新することはできないため、2番目のステップでbzip2またはgzipする必要があります。
これにより、過去7日間に変更されたすべてのファイルが表示されます。
find . -type f -mtime -7 -print
それをtar/Zipにパイプすると、うまくいくはずです。
7日前からすべての新しいファイルをバックアップするには、次のようにします。
tar --newer $(date -d'7 days ago' +"%d-%b") -zcf thisweek.tgz .
「7日前」を必要に応じて任意のものに置き換えることもできます
date -d'yesterday' +"%d-%b"
になります
または:date -d'first Sunday last month' +"%d-%b"
よくLinuxでfindコマンドのmanページを読んでみてください
man find
このようなものは
find . -type f -mtime -7 -print -exec cat {} \; | tar cf - | gzip -9
そしてあなたはそれを持っています
X日前より後の最終変更ファイルのリストを取得するには:
find . -mtime -x
次に、結果リスト内のファイルをtarおよびZipする必要があります。例:
tar czvf mytarfile.tgz `find . -mtime -30`
先月中に変更されたすべてのファイルに対して。
このスクリプトは、指定された日付の前後2分の修正日を持つファイルを検索します(また、要件に応じて条件の値を変更できます)
PATH_SRC="/home/celvas/Documents/Imp_Task/"
PATH_DST="/home/celvas/Downloads/zeeshan/"
cd $PATH_SRC
TODAY=$(date -d "$(date +%F)" +%s)
TODAY_TIME=$(date -d "$(date +%T)" +%s)
for f in `ls`;
do
# echo "File -> $f"
MOD_DATE=$(stat -c %y "$f")
MOD_DATE=${MOD_DATE% *}
# echo MOD_DATE: $MOD_DATE
MOD_DATE1=$(date -d "$MOD_DATE" +%s)
# echo MOD_DATE: $MOD_DATE
DIFF_IN_DATE=$[ $MOD_DATE1 - $TODAY ]
DIFF_IN_DATE1=$[ $MOD_DATE1 - $TODAY_TIME ]
#echo DIFF: $DIFF_IN_DATE
#echo DIFF1: $DIFF_IN_DATE1
if [[ ($DIFF_IN_DATE -ge -120) && ($DIFF_IN_DATE1 -le 120) && (DIFF_IN_DATE1 -ge -120) ]]
then
echo File lies in Next Hour = $f
echo MOD_DATE: $MOD_DATE
#mv $PATH_SRC/$f $PATH_DST/$f
fi
done
たとえば、特定の日付よりも前の修正日を持つファイルが必要な場合は、120
パラメーターの条件を破棄して、0
パラメーターで$DIFF_IN_DATE
を$DIFF_IN_DATE1
に変更できます。
同様に、指定された日付の1時間前後の変更日付を持つファイルが必要な場合は、120
の3600
をif CONDITION
に置き換えるだけです。