Arch linux:如何在使用 rsync 复制时从子文件夹中排除文件

Arch linux:如何在使用 rsync 复制时从子文件夹中排除文件

我想在 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执行您想要的操作时,请将其删除,然后它将继续并真正执行复制。

相关内容