用于将文件移动到特定文件夹的外壳脚本



也许有人可以指出我正确的方向: 我想将某些以特定类型命名的文件(例如 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将针对您提供的source设置destination路径。

即它将等于

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

最新更新