我已经实现了一个基于rsync的系统来将文件从不同的环境转移到其他环境。
我现在面临的问题是,有时文件的名称是相同的,但是路径和内容不同。
我想让rsync (如果可能的话)重命名重复的文件,因为我需要并使用--no-relative
选项。
重复的文件可以通过两种方式发生:
添加-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]}"
((count[$fname]++))
}
sourceDir1/file.txt dst/file.txt
sourceDir2/file.txt dst/file.txt1
sourceDir3/file.txt dst/file.txt2
将回显更改为rsync,仅此而已。
https://stackoverflow.com/questions/73555851
复制相似问题