Rsync make flat copy

不打扰是莪最后的温柔 提交于 2019-12-11 02:26:54

问题


I'm trying to write a script that copy all the files of one dir (with subdirs) to the root of another dir.

So Imagine I have this file structure:

/
pic.JPG
PIC5.JPG
FOLDER
  pic2.JPG
  pic3.JPG
  FOLDER2
    pic4.JPG

I want all the .JPG files from that directory and copy them over to another destination. But I don't want the directory structure, just the files.

This is what I've got:

"sudo rsync -aq  --include '*/' --include '*.JPG' --exclude '*\' /source/picturesRoot/ /destination/flatView/

But it also copies the directories :( I found this link on stackoverflow: rsync : Recursively sync all files while ignoring the directory structure

I looked at the solution and didn't see much difference with my command, apart from the * and . in the path. I tried it but it didn't work.

I hope somebody can help me, thanks.


回答1:


This answer cannot work for you because your pictures are not at the same level in directories. There is no option in rsync to skip the creation of directory structure. In the link you gave, it's working because the user explicitly select source files with *.

You can try something with find and rsync. Find will find files and rsync copy them.

Here is a solution :

find /source/picturesRoot -type f -name "*.JPG" -exec rsync -a {} /destination/flatView/ \;

Be careful, if two files have the same name just one will be in destination directory.



来源:https://stackoverflow.com/questions/24613009/rsync-make-flat-copy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!