编写每日cronjob的Bash脚本:带压缩的TXT文件目录同步
用于每日Cron任务的TXT文件同步脚本
我来帮你完善这个满足需求的bash脚本,它会自动同步指定目录下所有TXT文件(包含子目录),自动创建目标目录,并且通过tar压缩传输来提升效率,同时严格保持原有的目录结构:
#!/bin/bash -l # 定义源目录和目标目录,请根据实际路径修改 fromDir='/c/fromFolder' # 注意:在bash环境中Windows路径要转为这种格式,或者使用WSL的/mnt/c/fromFolder toDir='/c/toFolder' # 确保目标目录存在,不存在则自动创建(包括父目录) mkdir -p "$toDir" # 使用tar压缩源目录下的所有txt文件,保持目录结构,然后解压到目标目录 # 这种方式通过管道传输压缩包,避免生成临时文件,提升传输效率 tar -cf - -C "$fromDir" . --include="*.txt" | tar -xf - -C "$toDir" # 可选:添加日志输出,方便排查问题(如果需要的话取消注释) # exec > /var/log/txt_sync.log 2>&1
关键部分解释:
#!/bin/bash -l:使用登录shell模式执行脚本,会加载用户的环境变量,这对cron任务很重要,因为cron的默认环境变量很有限。mkdir -p "$toDir":-p参数会自动创建所有不存在的父目录,避免因为上级目录不存在导致报错。tar -cf - -C "$fromDir" . --include="*.txt":-cf -:创建压缩包并输出到标准输出(而不是生成文件)-C "$fromDir":切换到源目录后再执行打包操作,这样能保持相对目录结构--include="*.txt":只打包扩展名为txt的文件
tar -xf - -C "$toDir":从标准输入读取压缩包,解压到目标目录,完美还原原有的目录结构。
额外优化建议:
- 添加执行权限:脚本写完后记得赋予执行权限:
chmod +x sync_txt_files.sh - 配置Cron任务:如果要每天执行,比如凌晨2点,打开crontab编辑器:
crontab -e,添加一行:
注意替换成脚本的绝对路径。0 2 * * * /path/to/your/sync_txt_files.sh - 跨机器传输:如果需要同步到远程服务器,可以把tar管道改成ssh传输,示例:
这样压缩后通过SSH传输,在远程服务器直接解压,效率更高。tar -czf - -C "$fromDir" . --include="*.txt" | ssh your_user@remote_server "mkdir -p '$toDir' && tar -xzf - -C '$toDir'" - 日志记录:取消脚本里的日志注释,或者在cron任务里添加日志输出:
0 2 * * * /path/to/your/sync_txt_files.sh >> /var/log/txt_sync.log 2>&1
内容的提问来源于stack exchange,提问作者mcsy
相关产品推荐
相关产品推荐

