从不同目录中具有相同名称的文件进行归档
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 我用来为不同目录中具有相同名称的文件制作 tar 球的是
$find <path> -name <filename> -exec tar -rvf data.tar '' \;
i.e. tar [-]r --append
希望这会有所帮助。
【讨论】:
感谢八达通! “''\”是什么意思? breakets 存储 find 命令的输出,斜线分号以 exec 结束查找。您可以查看“man find”以获取更多详细信息。以上是关于从不同目录中具有相同名称的文件进行归档的主要内容,如果未能解决你的问题,请参考以下文章
从具有相同名称但不同扩展名的文件(*.pdf 和 *.rtf)中,如果 *.rtf 较新,则在控制台上输出消息