复制每个具有特定扩展名的文件(递归)

复制每个具有特定扩展名的文件(递归)

我需要一个脚本(可能是 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

相关内容