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


28

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

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

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

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

回答:


40

あなたはほぼ正しい。-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 {} \;

3
それmtime修正時間であることに留意してください(これはおそらくあなたが望むもののように聞こえますが、ほとんどの場合そうです)。これらのログが頻繁に読み取られる/参照される場合は、使用することができます-atime(最終アクセス時間)。
voretaq7

2
この行の最後のバックスラッシュは何をしますか?
ベンリアナージュ

1
@BenLiyanageバックスラッシュは、後に続くセミコロンのエスケープ文字です。セミコロンは、execステートメントの終わりを意味します。のmanページをご覧くださいfind
ジェニーDは、モニカを復活させる

4

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

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

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

代わりに、/ sourcedirectory内のファイルのみにオプション-maxdepth 1を使用します

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

最高評価の回答にはこのメモが含まれており、の使用を推奨してい-type fます。代わりに、これはサブフォルダーは移動しますが、サブフォルダーの内容はサブフォルダーから移動するのではなく、サブフォルダーに残るという意味ですか?
オーストラリアの

1
いいえ、「find」は/ sourcedirectory内のすべてのファイルとその/ sourcedirectory内のすべてのサブフォルダーを検出することを意味しますが、その時点では考えていませんでした。「-maxdepth 1」のみ/ sourcedirectoryに「検索」制限
harleygolfguy

ところで、私はこれを最高評価の回答への単なるコメントとして持っていたでしょう。これは良い答えでしたが、評判はありません。:)
harleygolfguy

0

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

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

なぜ彼は使用する必要がありますrmか?コマンドは、ログファイルと場合によっては宛先ディレクトリの両方を削除します。
スヴェン

Ops、私の間違い、@ mYzkはこのファイルを削除したいと思います。編集した
cuonglm

0

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

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

0
$ 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/ \;

私のテストでは、find: missing argumentエラーを再現することはできませんでしたが、末尾のスラッシュを削除すること/sourcedirectoryは正しいことに同意します。
-guzzijason
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.