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

时间:2010-04-23 11:15:28

标签: bash archive

我有一些名称相同但位于不同目录下的文件。例如,path1 / filea,path1 / fileb,path2 / filea,path2 / fileb,....

将文件存入档案的最佳方法是什么?在这些目录下,这些目录下还有许多其他文件,我不想在存档中创建。在我的头脑中,我想到使用Bash,可能是ar,tar和其他命令,但我不确定如何做到这一点。

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

谢谢和问候!


编辑:

示例真的很棒!

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

要递归地仅将文件名为“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 ";"

答案 2 :(得分: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 :(得分:1)

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

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

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

希望这有帮助。