Bash脚本将* .log文件复制到新目录中

时间:2012-12-17 19:15:10

标签: unix

我得到了一些这样的文件:

2012-12-17_083213_1.log
2012-12-17_083213_1.log_stats
2012-12-17_083213_1.logaccount_ptr
2012-12-17_083213_1.loginitial_ptr
2012-12-17_083213_1.logptr
2012-12-17_093049_2.log
2012-12-17_093049_2.log_stats
2012-12-17_093049_2.logaccount_ptr
2012-12-17_093049_2.loginitial_ptr
2012-12-17_093049_2.logptr

在这里,每个1G的数据填充一个新文件,使用年 - 月 - 日_HourMinuteSecond_number.log格式的名称创建(如上所示)。 我想

  1. 将所有* .log复制到一个名为Year-Month-Day格式的新文件夹,就像这些名称一样,它将被命名为2012-12-17
  2. Tgz那个文件夹
  3. 将其发送到服务器IP。
  4. 我不知道究竟是怎么回事。我希望它作为一个bash脚本,以便我可以每天为新添加的文件运行它。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

for f in *log ; do
    targetdir=${f:0:10}
    mkdir ${targetdir} 2>/dev/null
    echo ${targetdir} > dirstotar
    mv ${f} ${targetdir}
done 
sort dirstotar | uniq | while read dir ; do
    tar --remove-files -cvzf "${dir}.tar.gz" "${dir}"
done
find . -name '*tar.gz' -print | xargs scp '{}' user@host:/dir

这可能适合你。

  1. 为每个日志文件检查其名称,并使用日志文件名的前10个字符创建一个目录(如果有的话,只需忽略该错误)
  2. 将日志文件移动到该目录
  3. 将目录名称记录到文件中以供以后处理。
  4. 处理目录列表(tar)
  5. 将每个tar.gz复制到远程主机。
  6. 这只是你的起点。如果您想要一个完整的解决方案,请告诉我们您尝试了什么,出了什么问题。或聘请专业人士。