Linux-特定の日付以降に変更されたすべてのファイルを新しいハードドライブに転送します


2

私は最近、前学期の2台目のハードドライブが故障し始め、新しいドライブにゴーストできなくなりました。私はまだ失敗した最初のHDを持っていたので、そのドライブをゴーストしましたが、今では最初のゴーストの日付以降に変更されたすべてのファイルとものを取得する必要があります(最初のHDの失敗-> HDの2番目の失敗)日付以降の2番目のファイルがhdに失敗しました-> 3番目のhd Linuxターミナルでこれを簡単にスクリプト化する方法や、別のプログラムを使用する方法はありますか?

私は次のコマンドの使用を検討しましたが、最初のいくつかのフォルダーがアーカイブされた後は成功せず失敗します:

find . -type f -mtime -58 |xargs tar --no-recursion -czvf allmodified.tgz

tar czvf allmodified.tgz `find . -type f -mtime -58`

検索コードは機能し、必要なドライブ上のすべてのファイルを見つけますが、新しいドライブにファイルを解凍できるようにファイル構造でアーカイブする方法を見つけることができません(3番目の作業HD)過去2か月の場所に保存されます。

私は自分の問題を説明するのが得意ではありませんので、混乱が生じた場合は質問をしてください。回答するために最善を尽くします。

ヒントは役立ちます、ありがとうございます!

回答:


2

2番目の例では、ファイル名の空白を保護していないため、おそらく失敗します。呼び出しは少し異なります:

find . -type f -mtime -58 -print0 | tar -czvf allmodified.tar.gz --null -T -

ここでは、文字でfind終了するファイルパスを出力しますNUL。これらはにパイプされtar-T -null(--null)で区切られたstdin()から入力を読み取ります。--no-recursiontarballにディレクトリ自体を含めないので、これは必要ありません。

関連項目:GNU tar 1.27:6.3ファイルからの名前の読み取り

その後、アーカイブを取得したディレクトリと同じディレクトリから抽出し、ファイルが属するディレクトリにファイルを配置します。抽出時に既存のファイルtar上書きされることに注意してください。それを防ぐには、--skip-old-filesオプションを使用します。


2番目の例では、ファイルまたはパスに空白が含まれていると失敗します。これtarは、2つのファイルfoo barbazfind出力される)3つ、つまりtar foo bar baz。これに対処する適切な方法は、findwith の出力を-print0次のコマンドにパイプすることです。そのコマンドにNUL-delimited入力(ほとんどのGNUユーティリティが行う)から読み込むスイッチがある場合。


この方法を使用すると、新しいドライブでtarを「解凍」し、それに応じてファイルを配置できますか?
サミュエルケイン

はい。サンプルファイルのセットでテストしました。tarballは、tarされたのと同じルートディレクトリから抽出する必要があることに注意してください。また、tarは既存のファイルを上書きします。それを防ぐには、--skip-old-files抽出時に使用します。
slhck

したがって、一方の/ media / ubuntu / OSディレクトリでtarした場合、もう一方のドライブの/ media / unbuntu / OS1フォルダーにtarを移動する必要がありますか?また、--skip-old-filesが抽出時にどのように機能するかについて詳しく説明してもらえますか(私はこれは本当に初心者です)、これを正しく行うと100%確信していないので、破滅するつもりです多くのこと。ご協力ありがとうございます
サミュエルケイン

あなたが実行した場合find … | tar …、あなたがであったが/media/ubuntu/OS/、その後、cd /media/ubuntu/OS1/およびtar -xcvf allmodified.tar.gz --skip-old-files、その後の唯一の不足しているファイルは、OS1あなたから作成されOSたバックアップ。どうなるかわからない場合は、最初に小さなテストアーカイブを作成してみてください。または、アーカイブの内容を一覧表示し、tar -tvf allmodified.tar.gztarがそれぞれのパスでそれらを作成することを想像してください(たとえば、tar -tvfwritesの場合./foo/bar、ファイル/media/ubuntu/OS1/foo/barが作成されます)。いずれにせよ、最初に小さなテストをお勧めします。
slhck

素晴らしい!どうもありがとうございます!テストとプロジェクト全体を完了したら、結果をお知らせします
サミュエルケイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.