У меня есть несколько символических ссылок на другие файлы в каталоге. Я хочу конвертировать эти ссылки в независимые файлы.
Есть команда, которая делает это?
cp --remove-destination "$(readlink <symlink>)" <symlink>
В то время как Игнасио - хороший ответ, я хотел автоматизировать процесс для каждого файла, который является символической ссылкой в текущем каталоге и подкаталогах.
Это делает трюк:
находить . -тип l -exec cp \"{} \" \"{}. tmp $$ \" \; -exec mv \"{}. tmp $$ \" \"{} \" \;
Надеюсь это поможет!
Первый способ, который мне приходит в голову, - это скопировать все ссылки на новые файлы, а затем удалить все ссылки.
cp <link> <link>.new
rm <link>
Надеемся, что файлы имеют какую-то общую структуру имен, так что вы можете использовать подстановочные знаки и запускать команды только один раз, в противном случае вы можете написать простой скрипт оболочки
К сведению: Mac OS X не поддерживает флаг --remove-destination, поэтому я написал простой скрипт для размещения в каталоге /usr /bin:
FILE=$1
TEMP=$1".tmp"
mv $FILE $TEMP
if [ -e $TEMP ]
then
cp "$(readlink $TEMP)" $FILE
if [ -f $FILE ]
then
rm $TEMP
else
echo "unln failed."
fi
fi
Этот позволяет вам использовать подстановочные знаки:
for FILE in "$@"
do
TEMP=$FILE".tmp"
if [ -h $FILE ]
then
mv $FILE $TEMP
if [ -e $TEMP ]
then
cp "$(readlink $TEMP)" $FILE
if [ -f $FILE ]
then
rm $TEMP
else
echo "unln failed for link: $FILE"
fi
fi
fi
done