сохранить соединение с жесткой ссылкой после удаления файла

Я пытаюсь добиться чего-то, что представлялось мне очень простым, но в итоге оказалось сложнее, чем ожидалось.

У меня есть папка: source/. У меня есть второй: target/. Я создаю файл test.jar в своей первой папке. Затем я хочу, чтобы этот файл отображался и был исполняемым в моей второй папке. Я вижу 3 варианта:

  • вручную скопируйте/вставьте мой файл. Это работает, но... Я не хочу делать это каждый раз, когда обновляю свой файл.

  • символическая ссылка. Это работает, но если я запускаю файл jar, контекст будет source/, а не target/, как хотелось бы.

  • жесткая ссылка. Это именно то, что мне нужно, но проблема в том, что test.jar не модифицируется, а генерируется. Это означает, что после стирания source/test.jar target.test.jar по-прежнему ссылается на старый файл... Можно ли заставить два файла всегда иметь одно и то же значение?

Спасибо за вашу помощь !

EDIT: На данный момент я решил проблему, добавив строку для копирования моего файла из источника/в цель/ внутри скрипта, который я все равно буду выполнять после создания jar. Я думаю, что то, что я хотел сделать, на самом деле невозможно. Потребуется новый тип ссылок, который связывает содержимое двух файлов с указанием их пути, а не их индекса...


person Sharcoux    schedule 17.10.2014    source источник
comment
В зависимости от вашей среды вы можете настроить задачу сборки, которая копирует (сгенерированный?) .jar для вас. Это повысит переносимость, поскольку Windows не поддерживает символические ссылки, как это делает Unix.   -  person rr-    schedule 17.10.2014
comment
››Я не хочу делать это каждый раз при обновлении файла. Проверьте, соответствует ли inotifywait или rsync может вам помочь.   -  person anishsane    schedule 17.10.2014
comment
Я проверил inotifywait и rsync. Извините, я не понимаю, как именно я должен использовать его для решения моей проблемы. Я думаю, что комментарий @rr предлагает лучший подход для моего случая. Я использую Maven2. Я попробую, но пока не знаю, как этого добиться. Я проведу небольшое исследование и вернусь.   -  person Sharcoux    schedule 18.10.2014
comment
В порядке. Поскольку мне это нужно только для себя, я не хочу изменять файл pom. Есть ли способ с помощью Maven выполнить задачу сборки только на моем компьютере?   -  person Sharcoux    schedule 20.10.2014


Ответы (2)


Не создавайте мягкую ссылку на файл. Создайте мягкую ссылку на всю папку.

Что-то вроде

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

Тогда папка target/ является папкой-ссылкой на первую папку, и контекст должен быть таким же.

Вы также можете попробовать использовать git (локально) и извлекать источник/целевую папку.

person sestus    schedule 17.10.2014
comment
Это предполагает, что между source и target нет никаких различий, кроме их имен. - person chepner; 17.10.2014
comment
Да, как гость от главы, две папки разные. Но спасибо за ваше предложение. - person Sharcoux; 18.10.2014

Вы можете попробовать создать исполняемый сценарий оболочки с именем test.jar в каталоге target и заставить его вызывать path/source/test.jar, пересылая все параметры. Что-то вроде:

#!/bin/bash
path/source/test.jar "$@"
person jmajnert    schedule 22.10.2014
comment
Спасибо за вашу помощь. Это может быть хорошей идеей, но я бы предпочел, чтобы файл jar физически присутствовал в папке. Таким образом, если я хочу скопировать, переместить, сжать... всю папку, я могу сделать это очень легко. - person Sharcoux; 24.10.2014
comment
Тогда, я думаю, вам нужно иметь твердую копию в каталоге и убедиться, что обновления в source/test.jar отражаются в целевом каталоге... изменив процедуру сборки, чтобы убедиться, что это ваш лучший выбор, тогда - person jmajnert; 24.10.2014