Linux Bash: タイムスタンプによるファイル/ディレクトリの移動/コピー

Linux Bash: タイムスタンプによるファイル/ディレクトリの移動/コピー

私が使用しているコマンドは次のとおりです:

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

あるディレクトリから別のディレクトリに多数のディレクトリをコピーしようとしていますが、コピーされるのは過去 2 時間以内に作成されたディレクトリのみです。

私のコマンドは機能していませんが、その理由がよくわかりません。明らかに、私はあまり経験豊富な Linux ユーザーではありません。私が受け取った情報によると、cp意図した宛先がソースとして解釈されているようです。

実際に使ってみてxargs、さらによく分かりませんでした。

Debian Squeezy で Bash を使用し、ルートでコマンドを実行します。

答え1

私が得た情報によると、cp意図した目的地がソースとして解釈されているようです。

はい、そうです。一般的な Linux/Unix 構文は次のようになります。

[some command] [some command options] [source item] [destination item]

それで、あなたのコマンドを見てみましょう:

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

これはcp -f absolute-destination {}逆です。 はコマンド{}によって見つかったソース ファイルを表しfind、「絶対宛先」はまさに宛先です。したがって、コマンドのその部分は と書き直す必要がありますcp -f {} absolute-destination

さらに:

  • とにかく、時間に基づいてすべてのファイルを検索する場合、は-name "*"冗長かつ不必要であるため、これを削除できます。
  • また、 の使用はamin少々紛らわしいです。-amin -120は「ファイルはアクセスした過去120分間で」創造cminファイルの時刻は、代わりに「数分前に変更」に変更する必要がありますn。詳細については、Linuxfindマニュアルページ。

したがって、最終的なコマンドは次のようになります。

find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;

ただし、そのcpコマンドを実行する前に、次のようにして「ドライ ラン」を実行して、echo実際に何が起きるかを確認する必要があります。

find absolute-path -cmin -120 -exec echo {} \;

覚えておいてください、このようなコマンドのテスト「ドライラン」を実行してください前に実際/最終的なコマンドを実行すると、長期的には頭痛の種が減ります。特に、コマンドを として実行することを計画している場合はそうですroot

コマンド ロジックで単純な不注意なミスを犯し、予期しない形で失敗する可能性があるかどうかはわかりません。また、誤って構造化されたコマンドをテストせずに「本番環境」に急いで導入すると、最初は数分は節約できるかもしれませんが、その後、クリーンアップ作業に何時間も、場合によっては何日もかかる可能性があります。いつもコマンドラインで作業するときは安全に行ってください。

関連情報