【问题标题】:bash: move new file as soon as it is writtenbash:写入后立即移动新文件
【发布时间】:2021-04-10 16:37:43
【问题描述】:

我正在尝试编写一个 bash 脚本来将文件从源移动到目标,以节省源磁盘上的空间(源和目标是两台不同的机器)。

我可以使用 scp 协议来处理移动部分,但问题是我使用的软件非常快速地写入了很多文件(幸运的是每个文件都有相同的扩展名),我想移动一个文件为刚写完。

所以,在源码目录下,我想:

  • 将文件移动到目标位置,
  • 从源中删除文件,

...直到软件停止在源上写入新文件。

有什么帮助吗?

提前谢谢你。

【问题讨论】:

  • @sam_dc - 您想如何检测软件何时停止在源上写入新文件
  • 您可能会考虑不写入文件根本。写入命名管道,您可以使用ssh remotehost 'cat > destination' 之类的命令从该管道中读取,以仅使用恒定数量的本地磁盘空间将文件“流式传输”到远程主机。
  • 您要移动所有文件吗?您可以使用 sshfs 将目标挂载到源并使其自行写入远程。
  • @chepner 不幸的是我无法控制我的软件的输出

标签: bash loops move


【解决方案1】:

这是inotifywait 的工作。

inotifywait -meclose_write . |
while read d e f
do
    echo Now is the time to move "$f".
done

当然你可以指定任何源目录而不是.

【讨论】:

  • 可能inotifywait 的工作,这是特定于 Linux 的。其他操作系统也有类似的文件系统监控机制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多