我有一些具有相同名称的不同文件,我想将它们全部复制到具有扁平结构的目标(没有目录,只是文件),有没有办法将一些文本附加到其中一个文件名这样两者都可以被复制。
需要使用rsync,因为我需要从副本中排除一些文件。
例如:
dir1/file1.txt
dir1/dir2/file1.txt
两者都被复制,并在目的地有:
file1.txt
file1.txt.txt
答案 0 :(得分:0)
通常,当我想做一些复杂的名称mungling时,我只需编写文件列表(使用find dir1 >listfiles
)并使用文本编辑器修复它。
,s/^.*\/([^\/]+)$/cp \0 destination/\1/
转换文件,如
dir1/file1.txt
dir1/dir2/file1.txt
到类似的脚本:
cp dir1/file1.txt destination/file1.txt
cp dir1/dir2/file1.txt destination/file1.txt
然后您可以执行cut -f 3 <listfiles | sort | uniq -d
之类的操作来查找具有相同目标文件名的内容。然后回到编辑器并修复这些行。
几分钟后,您会得到一个完整的脚本,可以完全找到您想要的副本,因为您可以看到每个命令并为每个案例应用最佳修复。
答案 1 :(得分:0)
据我所知,rsync中没有默认选项可以做到这一点。但我想,因为您正在复制具有相同名称但来自不同目录的文件,所以您正在使用 多个rsync命令。
所以,这给了你两个选择:
创建文件夹..
rsync -av /home/user1/file1 /media/foo/user1/file1
rsync -av /home/user2/file1 /media/foo/user2/file1
etc..
或重命名具有id的文件
rsync -av /home/user1/file1 /media/foo/parent_dir-file1
rsync -av /home/user2file1 /media/foo/parent_dir-file1
etc..
如果您想使用第二个解决方案,您可以构建一个简单的脚本。当你使用rsync时,我想你已经了解了GNU-Linux的基础知识,所以一个简单的bash脚本就足够了!
基本ID是获取父文件夹名称并将其作为变量添加到rsync
命令的路径中。 (它永远不会起作用)
如果你想确定一个好的id,你可以设置一个计数器并增加像
file1-1
file1-2
file1-3
但是你将失去其绝对路径的轨道。
所有解决方案都可以运作,由您自己选择满足您需求的解决方案!