Bash 从不同目录中具有相同名称的文件进行存档

Bash 从不同目录中具有相同名称的文件进行存档,bash,archive,Bash,Archive,我有一些同名但在不同目录下的文件。例如,path1/filea、path1/fileb、path2/filea、path2/fileb等 将文件归档的最佳方法是什么?在这些目录下,我不想将这些目录下的许多其他文件放入存档。在我的脑海中,我想到了使用Bash,可能是ar、tar和其他命令,但不知道如何确切地做到这一点 重命名文件似乎使文件名有点复杂。我倾向于将目录结构保存在归档文件中。或者我可能错了。欢迎提出其他想法 谢谢和问候 编辑: 示例将非常好 您可以将tar与-exclude模式选项一起使

我有一些同名但在不同目录下的文件。例如,path1/filea、path1/fileb、path2/filea、path2/fileb等

将文件归档的最佳方法是什么?在这些目录下,我不想将这些目录下的许多其他文件放入存档。在我的脑海中,我想到了使用Bash,可能是ar、tar和其他命令,但不知道如何确切地做到这一点

重命名文件似乎使文件名有点复杂。我倾向于将目录结构保存在归档文件中。或者我可能错了。欢迎提出其他想法

谢谢和问候

编辑:

示例将非常好

您可以将tar与-exclude模式选项一起使用。有关更多信息,请参阅手册页。
要排除文件,请参见示例。

要从/path/To/source To/path/To/archive递归复制文件名为filea或fileb的文件,可以使用:

rsync -avm --include='file[ab]' -f 'hide,! */' /path/to/source/ /path/to/archive/
“*/”是与“任意目录”匹配的模式 '! */' 匹配任何非目录的内容,例如文件 '隐藏,!*/'意味着隐藏所有文件 筛选规则按顺序应用,并应用匹配的第一个规则。 -include='file[ab]'具有优先权,因此如果某个文件与'file[ab]'匹配,则该文件将被包括在内。 任何其他文件都将从要传输的文件列表中排除。 另一种选择是使用find…exec模式:


我用来为不同目录中同名的文件制作tar球的是

$find <path> -name <filename> -exec tar -rvf data.tar '{}' \;

i.e. tar [-]r --append

希望这有帮助。

您可以使用find命令搜索多个目录

# example: create archive of .tex files
find -x LaTeX-files1 LaTeX-files2 -name "*.tex" -print0 | tar --null --no-recursion -uf LaTeXfiles.tar --files-from - 

谢谢它是否适用于来自多个源路径且名称相同的文件?它还能维护归档文件中的目录吗?如果您有多个源路径,我的第一个倾向是将/path/to/source/命名为所有源路径的父目录。但是,如果父级有一些您想要的名为filea的文件,还有一些您不想要的文件,那么很明显,这将不会产生所需的结果。在这种情况下,可以使用不同的源路径发出多个rsync命令,但都是相同的归档路径。是的,归档目录维护目录结构。更简单:查找cpio-pdl通常您希望l只创建链接。谢谢!你能举几个例子吗?谢谢章鱼!“{}”是什么意思?breakets存储find命令的输出,斜杠分号以exec结束find。您可以查看“男人发现”了解更多详细信息。
# example: create archive of .tex files
find -x LaTeX-files1 LaTeX-files2 -name "*.tex" -print0 | tar --null --no-recursion -uf LaTeXfiles.tar --files-from -