使用 find 与 scp 或 rsync 发送找到的文件

使用 find 与 scp 或 rsync 发送找到的文件

我正在尝试运行一个简单的命令来搜索专用文件类型,一旦找到,就将该文件和目录结构复制到远程服务器。

例如:

find Source/ -name *.CR2 | xargs -d '\n' cp --parents -t /STORAGE/location/ 

在这种情况下,它会将找到的文件复制到具有父文件夹结构的单独目录中。我想用 rsync 或 scp 做同样的事情。

我尝试过对下面的代码进行一些争论,但没有成功。

find /src/dir/ -name *.CR2 -printf %P\\0 \ | rsync -av -e ssh --files-from=- --from0 /src/dir/ remote@server:/Storage/

任何援助将不胜感激。

我正在对多年的家庭照片进行排序,而不是在我的 zfs 阵列上的一个目录中找到它们并将它们重写到同一阵列上的另一个位置(这会占用时间),而是想找到它们并将它们发送到单独的机器将按类型对它们进行排序,遍历fdupes,然后遍历phockup以按日期对它们进行排序。我这样做是为了万一我搞砸了,我会让原始文件安全无虞。

编辑:我要感谢回答我问题的人。幸运的是我在你回复之前找到了解决方案,不幸的是我没有想到解决方案会有多慢。所以我选择按照以前的方式去做。

这是对我有用的代码。虽然它需要一些 ssh 密钥交接才能正常工作,所以我不需要为每个文件输入密码。

find Sorted/ -name *.JPG -exec rsync -a -e ssh --relative '{}' usr@remote:/1/2/3/ ';'

我将尝试提到的一些其他建议,看看它们是否更快,但就目前情况而言,我最终只是制作了一个在后台运行的 shell 脚本。

再次感谢!

答案1

find Source/ -type f -name '*.CR2' -print0 |
    rsync --dry-run -av --files-from - --from0 . remote@server:/Storage/

--dry-run当您对计划要做的事情感到满意时,即可删除。

答案2

我们可以使用下面的命令

 find  path -type f -iname "filename" -exec scp {} destinationhost:/var/tmp/ \;

相关内容