最後の日に作成されたファイルのみを別のフォルダにコピーするスクリプトを作成しています。私が経験している問題は、私のスクリプトが一日を過ぎていないファイルだけでなく、ソースディレクトリ内のすべてのファイルをコピーすることです。
これが私が持っているものです:
find . -mtime -1 -exec cp --preserve --parents -a "{}" /somefolder \;
上記のコードはソースディレクトリのすべてのファイルをコピーします。 「cp」のすべてのパラメータを削除すると機能します。
find . -mtime -1 -exec cp "{}" /somefolder \;
上記のコードは必要な場合にのみ最新のファイルをコピーしますが、cpパラメータを使用して属性を保持する必要があります。
また、-execオプションが問題である可能性があると考えて、変数とforループを試してみました。
files="$(find -mtime -1)"
for file in "$files"
do
cp --parents --preserve -a file /somefolder
しかし、上記のforループは同じ問題を引き起こし、すべてのファイルがコピーされます。 $filesをechoすると、必要なファイルのみが表示されます。
どのように動作させることができますか?
答え1
一部の実装には、ターゲットディレクトリを配置するオプションがcp
あります。-t
今後文書:
find . -mtime -1 -exec cp -a --parents -t /somefolder "{}" \+
これは後者を削除したことを-a
意味します。--preserve
答え2
助けてくださった皆様に感謝し、これを実現できるよう提案していただきました。
以下のコードを使用するとうまくいきます。
find /sourcefolder -type f -mtime -1 -exec cp -a "{}" /somefolder \;
もう一度ありがとうございます!
答え3
次のように使用できますpax
。
pax -wrT "11$(date +%H%M)," . /destination/folder
コマンドラインを少しずつ:
-wr
- riteとeadオプションのpax
両方が与えられたときにコピーされます。ここでも役に立ちます。-w
-r
(ただし、上記のコマンドには含まれません)-l
インク - 可能であれば、ファイルデータをコピーする代わりにハードリンクを作成します。-X
pax
同じソースデバイスおよび/またはファイルシステムを制限するために使用されます。-s/src regex/replace/
- ストリーム内のファイル名を変更します。-v
erbose - ソース/ターゲットファイルの報告用。
-T
--T
imeオプションは、ターゲットアーカイブ用のファイルを選択します。(またはで使用する場合は、単にコピー-wr
)/m
修正または/c
inodehangeに基づいて(あるいは、両方)移流。修正時間がデフォルトです。から...
男公園
... 2つのファイル時間を使用した時間比較は、paxを使用して時間ベースの増分アーカイブを生成するのに役立ちます(指定された時間範囲内で変更されたファイルのみをアーカイブします)。
時間範囲は6つの異なるフィールドで構成され、各フィールドには2桁の数字を含める必要があります。形式は次のとおりです。
[[[[[cc]yy]mm]dd]HH]MM[.SS]
どこに
cc
年(世紀)の最初の2桁、年yy
の最後の2桁、最初の桁はmm
月(01~12)、dd
日(01~31)、HH
日時間(00~23)、MM
分(00~59)、SS
秒(00~59)。分フィールドはMM
必須であり、他のフィールドはオプションであるため、次の順序で追加する必要があります。HH, dd, mm, yy, cc
この
SS
フィールドは他のフィールドとは独立して追加できます。時間範囲は現在の時間に基づいているため...-T 1234/cm
...今日の午後12時34分以降に変更またはinodeが変更されたすべてのファイルを選択します。
-T
複数の時間範囲を提供し、最初の一致の確認を停止できます。
...したがって、11
私のコマンド例のupは今日に基づいています。これは今日の日付(12日)より1つ少なく、残りは標準"$(date)"
形式で、その後にカンマが付きます。
...除外 - 言及する価値のある最後のもの - 私はターゲットディレクトリに絶対パスを使用します。そうすれば、皆さんもそうしなければなりません。この文書のすべての参照不特定行動相対的なターゲットパスの場合 - 最初に試したときpax
に絶対パスを使用するまで、すべての奇妙な結果に混乱し、1時間息を呑んだ。
答え4
私は同じことをしていますが、フォルダ構造を維持する必要があります。だから私がしたことは少し異なりました。
cd sourcedir
find . -type f -mtime -$days -print0 | tar -czvf ${tarpath}/testtar.tar.gz --null -T -
ここで、$days は日数で、$tarpath はこれらのファイルが保存される一時パスです。回復したいとき。
cd $destdir
tar -xvzf ${tarpath}/testtar.tar.gz
これは私にとって効果的でした。
注:バックアップ中に特定のフォルダを除外するには、次のコマンドを使用できます。
find . -type f -mtime -$days ! -path '*/FolderToavoidSearch/*' -print0 | tar -czvf ${tarpath}/testtar.tar.gz --null -T -
利点:1.常に圧縮された形式で最後の復元コピーがあります。
また、履歴書の間にファイルが何であるかを確認し、すべてが正常であればスクリプトを実行し続けることができる一時停止があります。
フォルダ構造が維持されるため、ソースディレクトリからターゲットディレクトリに変更されたファイルが上書きされます。
注:一方、要件が日付に制限されていない場合は、rsyncを使用してください。
rsync -avz --exclude 'FolderToavoidSearch' --backup --backup-dir="/backup/dir/test/backup_$(date +\%Y-\%m-\%d)" /source/dir/ /dest/dir/
日付を含むrsycに関する追加情報ここ