我想在 Linux 控制台中使用 rsync 将文件从一个目录(文件夹“test2”)复制到另一个目录(文件夹“Destination”)。唯一的问题是什么?我想从主文件夹(“test2”)复制所有 .png 和 .jpg 文件,同时排除/跳过所有包含 .png 或 .jpg 文件的子文件夹(在此示例中为子文件夹“abcd”)以及子文件夹中的 .jpg 或 .png 文件。
我编写了一个 bash 脚本并运行它但没有成功,因为它将所有文件从我的源文件夹复制到了我的目标文件夹。
#!/bin/bash
#Define pathways to source and destination folder
source_folder="/home/Minja/Desktop/Test2/"
destination_folder="/home/Minja/Desktop/Destination/"
#Name of excluded subfolder
excluded_directory="abcd"
#Use of rsync with defined options
rsync -av --include="*/" --include="*.jpg" --include="*.png" \
--exclude="*" "$source_folder" "$destination_folder"
#Manually exclude/include files from excluded directory
rsync -av --exclude="*" --include="*.jpg" --include="*.png" \
"$source_folder/$excluded_directory/" "$destination_folder/$excluded_directory/"
您对如何解决此问题有什么建议吗?如何同时包含子文件夹中的 .jpg 和 .png 文件?
答案1
听起来您似乎不想从子目录中复制任何内容,而只想从顶层复制 PNG 和 JPG 文件。但是,您的最后一句话似乎与此要求相矛盾。
假设问题的第一部分是正确的,请禁用递归复制(-r
,暗示-a
):
rsync --dry-run -av --no-r "$source_folder"/*.png "$source_folder"/*.jpg "$destination_folder"
如果文件太多,shell 无法使用*.png
和进行枚举*.jpg
,请重新启用递归复制,但排除所有子目录:
rsync --dry-run -av --exclude '*/' --include '*.png' --include '*.jpg' --exclude '*' "$source_folder/" "$destination_folder"
在这两种情况下,--dry-run
当您看到它将rsync
执行您想要的操作时,请将其删除,然后它将继续并真正执行复制。