1日以内に新しいファイルを見つけてコピーします。

1日以内に新しいファイルを見つけてコピーします。

最後の日に作成されたファイルのみを別のフォルダにコピーするスクリプトを作成しています。私が経験している問題は、私のスクリプトが一日を過ぎていないファイルだけでなく、ソースディレクトリ内のすべてのファイルをコピーすることです。

これが私が持っているものです:

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

おすすめ記事