私はPHPではこれをしたくないので、シェルスクリプトに詳しい人が助けてくれることを願っています。
ディレクトリを再帰的に実行し、最終更新日がすべてのファイルを特定の日付よりも後の日付で見つけるスクリプトが必要です。次に、パス情報を保持したままファイルをtarおよびzip圧縮します。
私は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
-newermt
と、はるかに優れています。
-type f
選択したファイルのみに追加します。これはフォルダ構造を維持しますが、変更のあるファイルのみをバックアップします。
GNUを使用している場合find
は、関連するオプションが多数あります。唯一の問題は、それらへのインターフェースが優れていることです。
-mmin n
(分単位の変更時間)-mtime n
(変更日数)-newer file
(ファイルの変更時刻より新しい変更時刻)-daystart
(開始時刻を現在時刻から1日の始まりに調整)難しいのは、時間からの分数を決定することです。
検討する価値のある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
、ユーザーが中断した場合などに確実に削除されるようにする必要があります。
-newermt '2009-01-03T12:31:43'
して、参照用のファイルを作成する必要を回避できます。
-newermt
(-newerXY
複数のオプションがあるため、以下に記載されています。この場合、X = m、Y = t)。私が使用する(ほとんど古い)LinuxシステムでのGNU findはオプションをサポートしていないため、比較的最近のリリースです。ヘッドアップをありがとう。
-newermt '-2 weeks'
。
-newermt '2009-01-03T12:31:43'
見た目は素晴らしいですが、残念ながら間違ったタイムゾーンですべてを解釈しているようです。lists.gnu.org
これはtarを使用して直接行うことができます。
tar -N '2014-02-01 18:00:00' -jcvf archive.tar.bz2 files
これは、2014年1月1日18:00:00より新しいファイルを圧縮するようにtarに指示します。
tar
、OS XとFreeBSDのみがサポート--newer
さ-N
れていますtar
。これは、GNUの長いオプションです。
これは、いくつかのファイルで機能します。パスにスペースが含まれている場合に備えて、「-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
圧縮されたtarアーカイブをtarで更新することはできないため、2番目のステップでbzip2またはgzipする必要があります。
-type f
選択したファイルのみに追加します。これはフォルダ構造を維持しますが、最近変更/追加されたファイルのみをバックアップします。
次のコマンドを使用すると、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
。