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

Posted

技术标签:

【中文标题】从不同目录中具有相同名称的文件进行归档【英文标题】:Making archive from files with same names in different directories 【发布时间】:2010-04-23 11:15:27 【问题描述】:

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

将文件归档的最佳方法是什么?在这些目录下,这些目录下还有许多我不想归档的其他文件。我突然想到使用 Bash,可能是 ar、tar 和其他命令,但不知道具体该怎么做。

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

感谢和问候!


编辑:

例子会非常好!

【问题讨论】:

【参考方案1】:

您可以将tar--exclude PATTERN 选项一起使用。有关更多信息,请参见手册页。 要排除文件,您可以查看this page 的示例。

【讨论】:

谢谢!你能举几个例子吗?【参考方案2】:

你可以给 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 - 

【讨论】:

【参考方案3】:

要仅递归地将文件名为“filea”或“fileb”的文件从 /path/to/source 复制到 /path/to/archive,您可以使用:

rsync -avm --include='file[ab]' -f 'hide,! */' /path/to/source/ /path/to/archive/

'*/' 是匹配“任何目录”的模式 '! */' 匹配任何不是目录(即文件)的东西 'hide,! */' 表示隐藏所有文件 按顺序应用过滤规则,并应用第一个匹配的规则。 --include='file[ab]' 具有优先权,因此如果文件与 'file[ab]' 匹配,则将其包含在内。 任何其他文件都会从要传输的文件列表中排除。 另一种选择是使用find...exec 模式:
mkdir /path/to/archive
cd /path/to/source
find . -type f -iname "file[ab]" -exec cp --parents '' /path/to/archive ";"

【讨论】:

谢谢!它是否适用于来自多个源路径的文件,并且它们具有相同的名称?它还可以维护存档中的目录吗? 如果您有多个源路径,我的第一个倾向是将 /path/to/source/ 命名为所有源路径的父目录。但是,如果父级有一些您想要的名为“filea”的文件,而其他一些您没有的文件,那么显然这不会产生预期的结果。在这种情况下,是的,您可以使用不同的源路径发出多个 rsync 命令,但归档路径都相同。是的,存档目录维护了目录结构。 更简单:find cpio -pdl (通常你希望 l 只是创建链接)。【参考方案4】:

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

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

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

希望这会有所帮助。

【讨论】:

感谢八达通! “''\”是什么意思? breakets 存储 find 命令的输出,斜线分号以 exec 结束查找。您可以查看“man find”以获取更多详细信息。

以上是关于从不同目录中具有相同名称的文件进行归档的主要内容,如果未能解决你的问题,请参考以下文章

标题与标准标题具有相同名称但大小写不同的问题

将具有相同***名称的 Python 包保存在不同的目录中

VS Code:对具有相同名称和不同扩展名的文件进行分组

从具有相同名称但不同扩展名的文件(*.pdf 和 *.rtf)中,如果 *.rtf 较新,则在控制台上输出消息

批处理文件以循环遍历文件夹并将文件夹和内容复制到具有相同文件夹名称的目录

如何将具有不同名称和相同架构的 Excel 文件导入数据库?