我有一些名称相同但位于不同目录下的文件。例如,path1 / filea,path1 / fileb,path2 / filea,path2 / fileb,....
将文件存入档案的最佳方法是什么?在这些目录下,这些目录下还有许多其他文件,我不想在存档中创建。在我的头脑中,我想到使用Bash,可能是ar,tar和其他命令,但我不确定如何做到这一点。
重命名文件似乎使文件名有点复杂。我倾向于将目录结构保留在存档中。或者我可能错了。欢迎其他想法!
谢谢和问候!
编辑:
示例真的很棒!
答案 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
希望这有帮助。