我已经实现了一个基于rsync的系统来将文件从不同的环境转移到其他环境。
我现在面临的问题是,有时文件的名称是相同的,但是路径和内容不同。
我想让rsync (如果可能的话)重命名重复的文件,因为我需要并使用 --no-relative 选项。
--no-relative
重复的文件可以通过两种方式发生:
添加 -b --suffix 选项,允许我至少对前面提到的第一个复制文件的类型重复一次。
-b --suffix
一个最低限度的示例(适用于基于Linux的系统):
mkdir sourceDir1 sourceDir2 sourceDir3 destDir; echo "1" >> sourceDir1/file.txt; echo "2" >> sourceDir2/file.txt; echo "3" >> sourceDir3/file.txt; rsync --no-relative sourceDir1/file.txt destDir rsync --no-relative -b --suffix="_old" sourceDir2/file.txt sourceDir3/file.txt destDir
有没有办法达到我的要求?
发布于 2022-09-17 17:14:11
估计只有rsync是不可能的。你必须先列出一个文件列表,然后分析它才能解决这个问题。看一看这个命令:
$ rsync --no-implied-dirs --relative --dry-run --verbose sourceDir*/* dst/ sourceDir1/file.txt sourceDir2/file.txt sourceDir3/file.txt sent 167 bytes received 21 bytes 376.00 bytes/sec total size is 6 speedup is 0.03 (DRY RUN)
让我们使用它来创建源文件列表:
mapfile -t list < <(rsync --no-implied-dirs --relative --dry-run --verbose sourceDir*/* dst/)
现在,我们可以循环如下所示的列表:
declare -A count for item in "${list[@]}"; { [[ $item =~ ^sent.*bytes/sec$ ]] && break [[ $item ]] || break fname=$(basename $item) echo "$item dst/$fname${count[$fname]}"