Это зависит от обстоятельств.
Создание ссылки выполняется быстрее, чем копирование данных, но результирующий файл будет иметь то же содержимое, что и исходный, и любые изменения будут отображаться в обоих. Если это преимущество или нет, зависит от того, почему была сделана ссылка / копия. Кроме того, жесткие ссылки работают только в одной файловой системе, поэтому, если / var
или / var / tmp
монтируются отдельно от исходного каталога, связывание не будет работать.
Но мне интересно, каков здесь вариант использования. Если цель сценария - скопировать файл с именем $ 1
, зачем делать копию в $ TRANSFER_FILE
вместо того, чтобы просто запускать scp
непосредственно в исходном файле ? Создание локальной копии в первую очередь необходимо только в том случае, если есть основания предполагать, что исходный файл может быть изменен во время копирования, и файл не должен копироваться в несогласованном состоянии. Но у этого подхода есть некоторые проблемы:
1) создание локальной копии с помощью cp
имеет ту же проблему: источник также может быть изменен во время локальной копии.
2) связывание с ln
будет мгновенным, но поскольку жесткая ссылка указывает на те же данные, что и исходный, любой процесс, открывший файл до того, как ссылка была сделана, все еще может продолжить изменение данных.
Нужно либо убедиться, что файл не открыт в другом процессе после ссылки (используя что-то вроде lsof
), либо сделать копию и проверить целостность данных каким-либо приложением - конкретный метод. Поскольку ни то, ни другое не так просто, обычный способ внесения атомарных изменений - это записать новую копию файла и переименовать ее поверх старой. Таким образом, любые процессы, открывшие файл до переименования, получат старую версию, а все процессы, открывшие его после переименования, получат новую версию. Но никто не увидит неполную копию. Это необходимо сделать при изменении файла, но не в программе, читающей файл.