也许有人可以指出我正确的方向: 我想将某些以特定类型命名的文件(例如 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
。