【问题标题】:BASH script to copy files based on date, with a catch用于根据日期复制文件的 BASH 脚本,有一个问题
【发布时间】:2010-07-01 22:16:12
【问题描述】:

让我解释一下树形结构:我有一个网络目录,我们的数据库每天都会多次复制新的 .txt 文件。这些文件位于基于用户名的目录中。在本地磁盘上,我具有相同的结构(基于用户名的目录)并且需要使用最新的 .txt 文件进行更新。这不是一个同步过程:我将远程文件复制到本地目的地,之后我不关心它会发生什么,所以我不需要让它保持同步。但是,我确实只需要复制新文件,而不是那些我已经复制的文件。它看起来像:

远程磁盘

/mnt/remote/数据库
+ 用户 1/
+ 用户 2/
+ 用户 3/
+ 用户4/

本地磁盘

/var/数据库
+ 用户 1/
+ 用户 2/
+ 用户 3/
+ 用户4/

我玩过

find /mnt/remote/database/ -type f -mtime +1

和其他变体,但效果不是很好。

所以,我想弄清楚的脚本如下:
1- 递归检查 /mnt/remote/database 以获取 *.txt
2-检查文件日期以查看它们是否是新的(自从我上次检查以来,也许维护一个带有上次检查时间的文本文件作为参考?)
3- 如果文件是新文件,请将其复制到 /var/database 中的正确目的地(因此 /mnt/remote/database/user1/somefile.txt 将被复制到 /var/database/user1/)

我将通过 cron 作业运行脚本。

我现在正在用 C 语言做这件事,但 IT 人员在调试或编写 C 语言方面不是很好,如果他们需要添加或修复某些内容,他们可以更好地处理 bash 脚本,而我不太擅长。

有什么想法吗?

谢谢!

【问题讨论】:

标签: bash date file copy


【解决方案1】:

您可以考虑在输入和输出目录之间使用本地 rsync。它具有您希望使其同步策略非常灵活的所有选项。

【讨论】:

  • rsync -urlc --include="*.txt" /mnt/remote/database/ /var/database/ 有关 rsync 检查的更多信息:samba.anu.edu.au/ftp/rsync/rsync.html
  • 嗯,我似乎无法找到如何让它只复制比某个日期更新的文件和那些只有
  • 事实上,rsync 只会复制比上次调用更新的文件。如果您需要排除特定时期,您可以使用如下响应中的查找命令(使用 -mtime +xx)将其通过管道传输到 rsync 添加选项 --exclude_from=-
【解决方案2】:
find /mnt/remote/database/ -type f -newer $TIMESTAMP_FILE | xargs $CP_COMMAND
touch $TIMESTAMP_FILE

【讨论】:

  • 我会让$CP_COMMAND 成为一个脚本,它的第一个命令执行touch 以减少竞争条件。
  • 我认为这有点太生硬了,不能用来避免竞争条件...... rsync 是真正的答案。
  • 好的,movingtofreedom.org/2007/04/15/… 中的脚本运行良好,现在我需要弄清楚如何递归目录,获取目录名称并将其传递给复制脚本...跨度>
【解决方案3】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多