2014-10-17 38 views
0

我尝试实现一些我想象得非常简单但最终比预期更难的事情。擦除文件后保持硬链接连接

我有一个文件夹:source/。我有第二个:target/。我在我的第一个文件夹中创建一个文件test.jar。然后,我想让这个文件出现并且可以在我的第二个文件夹中执行。我看到3个选项:

  • 手动复制/粘贴我的文件。它的作品,但...我不想每次更新我的文件时都这样做。

  • 符号链接。它的工作原理,但如果我执行jar文件,上下文是source/而不是target/就像我想。

  • 硬链接。这正是我需要的,但问题是test.jar未被修改,但生成。这意味着擦除后source/test.jar,target.test.jar仍然引用旧文件...是否有可能强制2个文件始终具有相同的值?

感谢您的帮助!

编辑:现在,我解决了这个问题,通过添加一行来将文件从source /目标/复制到脚本中,我将在生成jar之后执行它。我认为我想要做的事实际上是不可能的。它需要一种新的链接,链接2个文件的内容,给出它们的路径名,而不是它们的索引节点...

+0

根据您的环境,您可以设置一个构建任务,为您复制(生成?)'.jar'。它会增加可移植性,因为Windows不支持像Unix那样的符号链接。 – 2014-10-17 10:55:53

+0

>>“我不想每次更新我的文件时都这样做。”检查['inotifywait'](http://man.cx/inotifywait)或['rsync'](http://man.cx/rsync)是否可以帮助你。 – anishsane 2014-10-17 11:18:15

+0

我检查了inotifywait和rsync。我很抱歉,我不明白我应该如何使用它来解决我的问题。我认为@rr的评论为我的案例提供了最好的方法。我正在使用Maven2。我会尝试,但我不知道如何实现这一点。我会做一些研究并回来。 – Sharcoux 2014-10-18 18:51:26

回答

0

不要创建文件的软链接。创建整个文件夹的软链接。

喜欢的东西

ln -s {whatever path}/source/ {whatever path}/target 

然后,文件夹目标/是一个文件夹链接到所述第一文件夹和上下文应该是相同的。

你也可以尝试使用git(本地)和checkout source/to folder target。

+0

这里假设'source'和'target'之间的* no *区别,除了他们的名字。 – chepner 2014-10-17 17:53:10

+0

是的,作为chapner的客人,这两个文件夹是不同的。但是,谢谢你的建议。 – Sharcoux 2014-10-18 18:40:22

0

您可以尝试在target目录中创建名为test.jar的可执行shell脚本,并使其调用path/source/test.jar传递转发所有参数。例如:

#!/bin/bash 
path/source/test.jar "[email protected]" 
+0

感谢您的帮助。这可能是一个好主意,但我宁愿将jar文件实际存在于文件夹中。这样,如果我想复制,移动,压缩...整个文件夹,我可以很容易地做到这一点。 – Sharcoux 2014-10-24 06:39:26

+0

然后我猜你需要在目录中有一个硬拷贝,并确保source/test.jar的更新反映在目标目录中...修改构建过程以确保这是您的最佳选择 – jmajnert 2014-10-24 07:46:54