find 및 rsync를 사용하여 특정 파일 형식을 재귀적으로 복사할 수 있지만 대상에 쓸 때 디렉터리 구조를 무시할 수 있습니까? 즉, 소스 아래의 모든 하위 디렉터리에 있는 모든 zip 파일을 복사하여 모두 하나의 대상 디렉터리에 넣습니다. 대상은 Samba를 통해 공유되는 동일한 컴퓨터에 NTFS를 설치하는 것입니다. 소스 파일이 변경되거나 삭제될 수 있으므로 rsync를 사용하고 싶습니다.
나는 다음과 같은 내용을 따라 뭔가를 정리하려고 노력했지만 올바른 길을 가고 있는지 또는 이것이 최선의 접근 방식인지 확실하지 않습니다.
usr/bin/find /SRC -name "*.zip" -exec usr/bin/rsync -vgoth --delete {} /DEST/ \;
명령은 궁극적으로 Crontab을 통해 실행되는 쉘 스크립트에서 실행되기 때문에 전체 경로를 사용합니다.
답변1
귀하의 질문을 오해했는지는 모르겠지만 귀하가 제공한 줄은 작동합니다(적어도 rsync 3.1.2를 사용하는 내 입장에서는)!
$ tree
.
├── file1.zip
├── folder1
│ └── file2.zip
└── folder2
└── subfolder
└── file3.zip
3 directories, 3 files
$ tree $BACKUP_DESTINATION
0 directories, 0 files
$ find . -iname "*.zip" -exec rsync -vgoth {} ${BACKUP_DESTINATION} \;
[...]
$ tree $BACKUP_DESTINATION
.
├── file1.zip
├── file2.zip
└── file3.zip
0 directories, 3 files
보시다시피, 3개의 zip 파일은 서로 다른 폴더에 있음에도 불구하고 경로 없이 복사됩니다.
더 나은 해결책을 찾았나요? (어쩌면 Joe가 제안한 rsync 목록에 있을 수도 있음)
(참고: BowlOfRed가 그의 의견에서 지적했듯이 이것은 --delete
내 테스트에서 누락되었습니다(원래 제안에서 사용하는 동안). 이 옵션을 사용하면 rsync가 불평하거나 누락되어 실패합니다 --recursive
. --dirs
버그는 버전에만 존재합니다. 2.6.7 따라서 이전 rsync 버전을 사용하고 있을 수도 있습니다. 또한 대상에서 파일 삭제에 대해 언급하지 않았으므로 이 옵션을 유지하려는지 모르겠습니다.)