Существует несколько вариантов перемещения папок. Наиболее подходящий для использования зависит от обстоятельств.
Изменение настроек конфигурации из приложения обычно предпочтительнее, если такая настройка существует.
Для Google Chrome есть параметр командной строки, который можно использовать:
google-chrome --disk-cache-dir="/tmp/chromium"
Это изменение можно сделать полу -perantent путем изменения файлов *.desktop, но сделать это громоздко и, вероятно, сломается. Поэтому может быть предпочтительнее более общий метод.
Это тот подход, который вы упомянули в своем вопросе. Это самый простой способ, и я попытался бы сначала попытаться описать ситуацию. Скопируйте или создайте новую папку в нужном месте и используйте команду ln -s:
ln -s [new-location] [old-location]
Это единственный тип ссылки, который будет работать с папками. Жесткие ссылки (созданные с помощью ln без опции -s) работают только с файлами.
Остерегайтесь, ссылки могут быть повреждены, если перемещена целевая папка или сама ссылка.
9] bind mountКрепление привязки можно рассматривать как установку папки вместо раздела. Я бы использовал этот подход, если бы хотел, чтобы несколько точек монтирования разделяли раздел, но не хотели использовать символические ссылки. Например, если программа неверно работает при встрече с символическими ссылками.
Что такое привязка?Обычно для предотвращения заполнения раздела / используется отдельный раздел /home. Также принято помещать /var в свой собственный раздел. Вы можете прочитать больше здесь:
Что такое привязка?Этот подход лучше всего применять во время новой установки операционной системы. Изменение структуры разделов уже запущенной системы является громоздким.
В java есть класс java.time.Period для хранения информации и временных промежуток. Он имеет следующий конструктор Period.between(LocalDate start, LocalDate end). В данной ситуации нужно только правильно определить дату начала и конца из четырех аспектов дат. Напишем метод, который это делает:
private static Period getPeriod(LocalDate s1, LocalDate f1,
LocalDate s2, LocalDate f2) {
//наиболее поздняя дата в качестве начала общего промежутка
LocalDate start = s1.isAfter(s2) ? s1 : s2;
//наиболее ранняя дата в качестве конечной даты
LocalDate end = f1.isBefore(f2) ? f1 : f2;
//ситуация когда пересечения у двух промежутков нет
if ((start == s1 && end == f1) || (start == s2 && end == f2))
return Period.ZERO;
else
return Period.between(start, end);
}
Использовать его можно следующим образом:
LocalDate s1 = LocalDate.of(2016, 12, 1);
LocalDate f1 = LocalDate.of(2016, 12, 5);
LocalDate s2 = LocalDate.of(2016, 12, 3);
LocalDate f2 = LocalDate.of(2016, 12, 10);
System.out.println(getPeriod(s1, f1, s2, f2).getDays());
Вывод:
2как диапазон берет максимальную дату из двух дат начала (в вашем примере 5 мая) и минимальную из двух дат окончания (в вашем примере 15 мая).
Вычитаете - используйте количество дней, которые пересекаются в первом и втором уровнях
PS: Если нужен пример на Java как посчитать разницу между двумя Date, вот есть неплохое описание [ ! d2]