É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.
- 1298 megtekintés
Hozzászólások
- A hozzászóláshoz be kell jelentkezni
Feltételezve, hogy egy fájlrendszeren vannak.
- A hozzászóláshoz be kell jelentkezni
És feltételezve, hogy nem pont az a lényeg, hogy ha az egyik példány módosul, a többi akkor se változzon.
- A hozzászóláshoz be kell jelentkezni
Na igen. Persze nem tudni, hogy mi a pontos ok.
- A hozzászóláshoz be kell jelentkezni
De mit akarsz elérni? Backupot készítenél?
cp -L
rsync -L
?
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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…
- A hozzászóláshoz be kell jelentkezni
Köszi NevemTeve! Utána nézek. Megtisztelve érzem magam, hogy ilyen sokat hozzászólsz a dolgaimhoz.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Köszi mindenkinek, de a NevemTeve által belinkelt fórumban volt egy megoldás.
- A hozzászóláshoz be kell jelentkezni
Amit ő írt... ;)
- A hozzászóláshoz be kell jelentkezni
Mondjuk még mindig nem lehet tudni, hogy mit is akartál, mert nem írtad még le. :-)
De az jó, ha már megvan a megoldás
- A hozzászóláshoz be kell jelentkezni