Я сделал это следующим образом:
ls -la | awk '/-\>/{system("rm "$10); system("cp "$12" .")}'
Как это работает:
ls -la
выводит что-то вроде этого:
lrwxr-xr-x 1 username groupname 44 10 Oct 12:17 Queue.swift -> ../../../Platform/DataStructures/Queue.swift
Столбец 10 равен Queue.swift
это имя локального файла.
Столбец 12 - это ../../../Platform/DataStructures/Queue.swift
, который является именем цели ссылки
Первая часть команды awk
- '/-\>/'
, что означает "match"строки, содержащие ->
с использованием регулярного выражения
Следующая часть команды awk - это два вызова system
First system("rm "$10)
, который расширяется до system("rm Queue.swift")
.
Thisприведет к удалению исходного файла (символической ссылки)
Второй - system("cp "$12" .")
, который расширяется до system("cp ../../../Platform/DataStructures/Queue.swift .")
Собирая все вместе, что происходит для каждого файла (который являетсясимволическая ссылка), сначала мы удаляем символическую ссылку, затем копируем целевой файл на его место.
Хотя это не является частью исходного вопроса, я использовал это в сочетании с git. Если вам случитсяделать это тоже, вы можете запустить git status .
впоследствии, и вы должны увидеть кучу изменений типа (и ничего эse), вот так:
typechange: Queue.swift