5

У меня есть несколько символических ссылок на другие файлы в каталоге. Я хочу конвертировать эти ссылки в независимые файлы.

Есть команда, которая делает это?

4 ответа4

8
cp --remove-destination "$(readlink <symlink>)" <symlink>
1

В то время как Игнасио - хороший ответ, я хотел автоматизировать процесс для каждого файла, который является символической ссылкой в текущем каталоге и подкаталогах.

Это делает трюк:

находить . -тип l -exec cp \"{} \" \"{}. tmp $$ \" \; -exec mv \"{}. tmp $$ \" \"{} \" \;

Надеюсь это поможет!

0

Первый способ, который мне приходит в голову, - это скопировать все ссылки на новые файлы, а затем удалить все ссылки.

cp <link> <link>.new
rm <link>

Надеемся, что файлы имеют какую-то общую структуру имен, так что вы можете использовать подстановочные знаки и запускать команды только один раз, в противном случае вы можете написать простой скрипт оболочки

0

К сведению: 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .