原始路徑,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