szimbolikus link kezelés

Fórumok

Érdekes dolgot szeretnék elérni. Egy adott mappa több alkönyvtáráról, az abban lévő fájlokról, és a hivatkozásikról van szó.

Meg lehet-e azt oldani hatékonyan, hogy a szimbolikus linkek ne linkek legyenek, hanem az eredeti fájl másolódjon a helyükre a szimbolikus link nevével?

Erre jelenleg még csak ötletem sincs. Tudom hogy a linket a -L kapcsolóval lehet ellenőrizni. S talán a find-et kéne használnom.
De várom az javaslatokat.

Hozzászólások

másolást felejtsd el, használd inkább a hardlink-et!

De mit akarsz elérni? Backupot készítenél?

cp -L

rsync -L

?

cp -rL vagy cp -H disztrótol függően jó lehet ilyenre.

-H follow command-line symbolic links in SOURCE

-L, --dereference
always follow symbolic links in SOURCE

-R, -r, --recursive
copy directories recursively

Természetesen mindent lehet (olyan ez, mint az Ausztria Lottó), 'find', 'readlink' meg ilyenek kellene bele; csak arra ügyelj, hogy a 'find' működése alatt ne módosíts azokban a könyvtárakban, amikben a find dolgozik. Példák itt: https://www.linuxquestions.org/questions/programming-9/frequently-repea…
Szerk: még egy példa, pont a te esetedre: https://www.linuxquestions.org/questions/programming-9/frequently-repea…

Ha jól értem, egy már létező szimbolikus linket akarsz kicserélni az "eredetijével".
Első blikkre:

find DIR -type l -execdir stat -f "cp %Y %N" {} \;

Ez elvileg kiírja, hogy mit akar másolni mire (a fájlt a linkre). Ha jónak tűnik, akkor a végére egy | sh. Esetleg a cp-hez egy -i opció jól jöhet.

NO WARRANTY:-)


#!/bin/bash

DIR=$HOME/work
cd $DIR || { echo "Bad directory name" && exit 1 ; }

OLDIFS=$IFS
IFS=$'\n'
for syml in $(find . -type l ); do
    src=$( readlink -e "$syml" )
    if [ -n "$src" ] && ! [ -d "$src" ]; then
        echo Processing link [$syml] to [$src]
        ls -al "$syml" "$src" # test
        #rm "$syml"
        #cp "$src" "$syml"
    fi
done

--
eutlantis