我需要一个脚本(可能是 bash、ksh 或其他什么),为了备份目的,它会复制目录的所有子目录和文件:.znc - 但 .log 文件。
结构如下:
.znc/用户
.znc/用户/用户名/moddata/.znc/
用户/用户名/moddata/log.znc/
用户/用户名/moddata/日志/文件.log
.znc/用户/用户名2/moddata/.znc/
用户/用户名2/moddata/log.znc/
用户/用户名2/moddata/日志/文件。日志
请注意,这只是结构的一部分,但这是我遇到麻烦的部分。
我需要复制 .znc/ 的所有内容,但扩展名为“log”的文件除外。我无法对find
或做太多事情grep
,因为有一个变量,用户名。
答案1
您可以使用同步。它还有一个很棒的功能,就是可以保留所有者/组/权限等
rsync -avi --exclude '*.log' .znc/ /path/to/destination/directory/
答案2
我首先想到的是:
cd /to/top/of/dir/structure
tar -cvf /path/to/tarfile.tar $(find . -type f ! -name '*.log')
但如果文件中有空格则此方法无效。
如果文件名中有空格,这可能会有效
cd /to/top/of/dir/structure
tar -cf /path/to/tarfile.tar --files-from /dev/null # trick to create empty tar file
find . -type f ! -name '*.log' -print0 | xargs -0 tar -uvf /path/to/tarfile.tar