web-dev-qa-db-ja.com

日付より古い別のディレクトリにファイルを移動する

今日より1年古いファイルを移動するソリューションを探しています。ログパーティションがいっぱいになりましたが、削除できません。彼らは長い間必要とされています。とにかく私が思いついた1つの解決策は:

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

これはうまくいくでしょうか? 「-mtime 365」と尋ねると、1年前のファイルが今日から新しい場所に移動されますか?

ありがとうございました!

30
mYzk

あなたはほぼ正しいです。 -mtime 365は、完全に365日経過したすべてのファイルになります。 365日以上経過したものが必要です。つまり、この+のような数字の前に-mtime +365を追加します。

-maxdepth 1フラグにも興味があるかもしれません。これにより、サブディレクトリ内のアイテムを移動できなくなります。

ディレクトリではなくファイルのみを移動することを確認する場合は、-type fを行に追加します。

行の終わりに\;を追加して、findが実行中のコマンドの終わりであることを認識できるようにします。

したがって、行は次のようになります。

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

安全のために、mvの代わりにls -lを実行することから始めます。これにより、mvで次のように再実行する前に、必要なファイルが正確に取得されていることを事前に確認できます。

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;
43
Jenny D

上記のソリューションを使用するときは注意してください、私はそれらを使用し、すべてのサブフォルダー内のすべてのファイルを移動しました!!!!

このコマンドは、/ sourceディレクトリ内のすべてのファイルと、sourceディレクトリの下のすべてのサブフォルダーを移動します。

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

代わりに、/ sourcedirectory内のファイルのみにオプション-maxdepth 1を使用してください。

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
4
harleygolfguy

このコマンドを使用して、ディレクトリではなくファイルのみを検索し、ファイルが1年以上古いことを指定できます。

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;
0
cuonglm
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to `-exec'

正しいのは、末尾のスラッシュを/sourcedirectory/から削除することです。

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
0

ファイルが頻繁にアクセスされる場合は、以下のコマンドをatimeで使用できます

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;
0
Pradeep Kanoor