【问题标题】: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 和其他命令,但不知道具体该怎么做。

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

感谢和问候!


编辑:

例子会非常好!

【问题讨论】:

    标签: bash archive


    【解决方案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”以获取更多详细信息。
      猜你喜欢
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 2016-01-05
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      相关资源
      最近更新 更多