コピー検索を使用すると、重複ファイルが生成されます。

コピー検索を使用すると、重複ファイルが生成されます。

最新のファイルとディレクトリをある場所から別の場所にコピーしようとしています。参照ファイルでfindコマンドを使用しています。参照ファイルより最新のファイルはすべてコピーされます。

find  /root/test/BACKUP/   -newer /root/test/BACKUP//reference -exec cp -r  '{}' /root/test/backup_170213_0328 ';'

問題は、/root/test/BACKUP/にサブディレクトリにコピーするだけでなく、別々にコピーする必要があるサブディレクトリがあるかどうかです。これにより、ターゲットに重複ファイルが作成されます。

[root@localhost S3_Backup]# tree /root/test/BACKUP/
/root/test/BACKUP/
├── Chrysanthemum.jpg
├── Desert.jpg
├── Hydrangeas.jpg
├── Jellyfish.jpg
├── level2
│   ├── Lighthouse.jpg
│   ├── Penguins.jpg
│   ├── teddy.jpg
│   └── Tulips.jpg
└── reference

1 directory, 9 files
[root@localhost S3_Backup]# tree /root/test/backup_170213_0328
/root/test/backup_170213_0328
├── BACKUP
│   ├── Chrysanthemum.jpg
│   ├── Desert.jpg
│   ├── Hydrangeas.jpg
│   ├── Jellyfish.jpg
│   ├── level2
│   │   ├── Lighthouse.jpg
│   │   ├── Penguins.jpg
│   │   ├── teddy.jpg
│   │   └── Tulips.jpg
│   └── reference
└── level2
    ├── Lighthouse.jpg
    ├── Penguins.jpg
    ├── teddy.jpg
    └── Tulips.jpg

3 directories, 13 files

答え1

埋め込みLinuxを使用している場合、またはより一般的にGNU coreutilsからコマンドが提供されている場合は、ターゲットよりも最新のファイルのみをコピーcpできます。以下のファイルが以下のファイルよりも最新でcp -uない場合、ファイルは2回コピーされないことを除いて、これは今行っている作業と同じです。/root/test/backup_170213_0328/root/test/BACKUP/

また、-pこのオプションをに渡す必要がありますcp。ほとんどの場合、特にバックアップを実行するときに権限を維持する必要があります。-dターゲット以外のシンボリックリンク自体をコピーする場合は、このプロセスに合格する必要があります。-rdpと省略できます-a

find  /root/test/BACKUP/   -newer /root/test/BACKUP//reference -exec cp -a  {} /root/test/backup_170213_0328 ';'

ただし、ルートディレクトリが変更された場合、ディレクトリツリー全体がコピーされる理由は明らかではありません。たとえば、ファイルの直下にファイルを作成すると、ツリー/root/test/BACKUP全体がコピーされます。ディレクトリをコピーしないでください。

find  /root/test/BACKUP/ ! -type d -newer /root/test/BACKUP//reference -exec cp -RPp {} /root/test/backup_170213_0328 ';'

また、ディレクトリツリーをコピーする代わりに、すべてのファイルがルートディレクトリにコピーされます。個々のファイルをコピーすることが主な目的のツールとは異なり、ディレクトリツリーをコピーすることが主な目的のツールを使用してこの問題を解決できます。例えば、公園:

find  /root/test/BACKUP/ ! -type d -newer /root/test/BACKUP//reference -exec pax -rw -pe {} /root/test/backup_170213_0328 ';'

またはrsyncを使用してください。

find  /root/test/BACKUP/ ! -type d -newer /root/test/BACKUP//reference -exec rsync -a {} /root/test/backup_170213_0328 ';'

ただし、増分バックアップを実行する場合は、実際に必要なのは、rsync以前のバックアップを指すと、以前のバックアップ--link-destにハードリンクされた既存のファイルでバックアップが作成されます。

rsync -a --link-dest=/root/test/backup_170213_0228 /root/test/BACKUP /root/test/backup_170213_0328

関連情報