我正在寻找满足以下要求的 tar 命令:
我想排除所有以以下结尾的文件:backwpup 和 .zip(中间和之前可以是任意文件,例如 uploads/123backwpup-123.zip)我想排除区域 /media/backup/ 和 /application/cache/ 中的所有文件夹
我从如下级别开始:
- 示例.com
- 例子.de
- 示例网站
每个目录都有子目录:
- /ETC/
- /httpdocs/
- /lib/
- ...
只需要保存/httpdocs/的内容。
我尝试使用命令:
tar --exclude={"*backwpup*.zip", "*/media/backup/*", "*/application/cache/*"} -czvf backup.tar.gz **/httpdocs
但不幸的是备份路径wp-content/uploads/backwpup-4578-备份/2022-10-31_12-22-31_IKXUCSLD01.zip仍然包括在内。
答案1
您可以尝试使用以下 tar 命令:
tar --exclude='backwpup.zip' --exclude='/media/backup/' --exclude='/application/cache/' -czvf backup.tar.gz example.com/httpdocs example.de/httpdocs example.org/httpdocs
此命令排除所有以“backwpup”或“.zip”结尾的文件以及指定位置的文件夹。它还仅包含每个域目录中的“httpdocs”子目录
答案2
或许是这样?
find * -type d \( -path '*/media/backup/*' -o -path '*/application/cache/*' \) -prune -o -path '*/httpdocs/*' -type f ! -name '*backwpup*.zip' -print0 | tar -czvf backup.tar.gz --null -T -
答案3
假设您正在使用 GNU tar,请参阅有关如何排除文件的文档:https://www.gnu.org/software/tar/manual/html_node/exclude.html 这详细说明了模式匹配:https://man7.org/linux/man-pages/man7/glob.7.html
假设您使用 GNU BASH,您可以使用 for 循环循环遍历目录:https://www.gnu.org/software/bash/manual/html_node/Looping-Constructs.html使用文件名扩展(https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html)
本页末尾有很好的例子: https://linuxize.com/post/bash-for-loop/