Shell 将文件移动到特定文件夹的脚本

Shell Script for moving files to a specific Folder

也许有人能给我指出正确的方向: 我想将某些以特定类型命名的文件(例如 file%AA)移动到我的存档中的镜像位置。 所以例如我有以下内容:

livefolder/folder1/file%AA.csv

并想将其移动到

archivefolder/folder1/file%AA.csv

当存档文件夹不存在时,应该创建它。 我怎样才能做到这一点? 目前我坚持这个:

find /livefolder/folder1/ -type d  \( -name '*%AA' \) -exec mv {} /archivefolder/folder1/ +

但是我需要对存在的每个子文件夹执行此操作。有没有办法对所有子文件夹递归执行此操作?

我希望有人能指出我正确的方向。 提前致谢!

正如 Barmer 和 Renaud 在评论中提到的,您可以使用 rsync。如果使用 --relative 选项时 subdirectories 不存在,它将在路径中创建它。但是您需要存在父目录(不幸的是,在您的情况下 archivefolder)。无论如何,您可以使用 mkdir -p 创建它(-p 只会创建一个目录,如果它不存在)。

rsync 命令将如下所示:

rsync -a --relative livefolder/./folder1/file%AA.csv archivefolder

relative 将根据您提供的 sourcedestination 中设置路径。

即等于

rsync [options] livefolder/folder1/file%AA.csv archivefolder/folder1/file%AA.csv

我们应该在 rsync 命令 (rsync -a --relative livefolder/./folder1/file%AA.csv) 的源路径中的 livefolder 之后使用 .。这意味着在给定的目标路径中,rsync 将以 /folder1/file%AA.csv 格式复制(即遵循源中 . 之后提到的层次结构)。因此,这将在 archivefolder.

中创建 folder1/file%AA.csv