原始路径,RootFolderI:
RootFolderI/FolderA/Subfolder1/Subsub1/JPG1.jpg -> want this jpg
RootFolderI/FolderA/Subfolder2/Subsub1/JPG2.jpg -> want this jpg
RootFolderI/FolderA/Subfolder2/Subsub2/JPG3.jpg
. . .
RootFolderI/FolderB/Subfolder1/Subsub1/JPG4.jpg -> want this jpg
RootFolderI/FolderB/Subfolder2/Subsub1/JPG5.jpg -> want this jpg
RootFolderI/FolderB/Subfolder3/Subsub2/JPG6.jpg
...
有很多文件夹FolderA/B/C/etc,但里面的文件夹结构总是一样的(除了文件不同)
我想复制到RootFolderII
:
- 仅所有文件夹A/B/等
- Subsub1 中的所有文件
...结果是这条新路径,RootFolderII:
RootFolderII/FolderA/ with JPG1.jpg, JPG2.jpg
RootFolderII/FolderB/ with JPG4.jpg,JPG5.jpg
我现在有以下代码(但它不起作用):
rsync -r --include='Folder*/Subfolder1/Subsub1/***' --exclude="/*/*/" /RootFolderI/ /RootFolderII/
在哪里
--exclude="/*/*/"
:创建文件夹A/B/... -> 工作
--include='Folder*/Subfolder1/Subsub1/***'
:我想复制所有文件(不是结构)... -> 它不起作用
???
好吧,我认为即使它正常工作,它也会将文件从FolderB复制到FolderA,而我不希望这样!
答案1
试一试。
rsync -r --include='*.jpg' --exclude="*" /RootFolderI/Folder*/Subfolder1/Subsub1/. /RootFolderII/.
答案2
我做了什么:
rsync
包含和排除将文件上移(向上 2 级)
find /folder/ -type f -mindepth 3 -execdir mv -t ../../ -- {} +
删除空文件夹
find /folder/*/ -type d -empty -delete
答案3
我认为我不会用于rsync
这项任务。 (没有增量算法,因此使用它几乎没有什么收获。)这是一个使用的版本cp
:
for rfipath in RootFolderI/*
do
folder="${rfipath/*\/}"
mkdir -p "RootFolderII/$folder"
cp -p "$rfipath"/*/Subsub1/* "RootFolderII/$folder"
done
输出
RootFolderII/FolderA/JPG1.jpg
RootFolderII/FolderA/JPG2.jpg
RootFolderII/FolderB/JPG4.jpg
RootFolderII/FolderB/JPG5.jpg
如果您确实想使用rsync
,请cp
用此替换该行。它将为您提供目录的修改时间:
for folder in RootFolderI/*
do
rsync -a "$folder"/*/Subsub1/ "RootFolderII/${folder/*\/}"
done