Portál AbcLinuxu, 15. května 2025 18:12

Dotaz: Jak upravit skript - existujici linky

22.2.2018 12:31 Alvarez
Jak upravit skript - existujici linky
Přečteno: 418×
Odpovědět | Admin

Zdravim, potreboval bych upravit skript (pro Debian):

#/bin/bash

FILES=/mnt/cml-homes/*
for f in $FILES
do
echo "Processing $f file..." # take action on each file. $f store current file name
echo $f
first=${f:15:1}
echo $first
ln -s $f /mnt/cml-homes-alpha/$first
done

Jeste nez se provede cyklus, bych potreboval aby se ty stavajici linky i neexistujici linky smazaly a znova vytvorily nove linky. Dekuji!


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.2.2018 13:22 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
Odpovědět | | Sbalit | Link | Blokovat | Admin
Z toho co píšeš není moc jasné co vlastně chceš dělat. Já bych na to osobně použil raději find.
22.2.2018 14:02 NN
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jake linky? Priklad?
22.2.2018 14:31 Alvarez
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
V adresari /mnt/cml-homes-alpha/ jsou vytvorene slozky podle pocatecnich pismen (uzivatelu) "a" "b" "c" a v nem symbolicke odkazy (linky) z adresare /mnt/cml-homes/ (v nem jsou domovske adresare uzivatelu). A kdyz smazu nejakeho uzivatele (domovsky adresar) v /mnt/cml-homes/ tak ty symobolicke odkazy nadale zustanou v /mnt/cml-homes-alpha/ A potreboval bych upravit skript, ktery jeste predtim nez vytvori symbolicke odkazy, tak aby nejdrive odstranil soucasne symbolicke odkazy a po te vytvoril znova vsechny ktere jsou v /mnt/cml-homes/

Vim, ze mohu rucne smazat...
Řešení 1× (Alvarez (tazatel))
23.2.2018 07:43 MM
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky

Nepotřebuješ smazat jen nevalidní symlinky?

tedy něco jako

find -L /mnt/cml-homes-alpha/ -maxdepth 1 -type l -delete

pohraj si s s optionami -maxdepth, -(x)type a podívejse na optiony -L -N -P v man find

23.2.2018 08:43 MM
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky

nejdříve to samozřejmě zkus jen vypsat (bez -delete na konci), aby sis nesmazal něco co nechceš.

Také by mohlo jít (pro výpis nevalidních symlinků)

find -maxdepth 1 -xtype l
Řešení 1× (Alvarez (tazatel))
24.2.2018 09:48 Alvarez
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
Dekuji moc. Pouzil jsem nakonec find /mnt/cml-homes-alpha/ -type l | xargs rm
24.2.2018 12:12 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
Ten xargs je zbytečný. Použij parametr -exec rm '{}' \;
Řešení 1× (Alvarez (tazatel))
Josef Kufner avatar 24.2.2018 12:16 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
xargs bude mnohem rychlejší. Sice se spustí navíc jeden xargs, ale nebude se spouštět rm na každý soubor. Ještě lepší je použít nulu jako oddělovač, aby nebyl problém s mezerama v názvech:
find /mnt/cml-homes-alpha/ -type l -print0 | xargs -0 rm
Hello world ! Segmentation fault (core dumped)
25.2.2018 18:43 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky

Není potřebný ani xargs, ani oddělený proces pro každý rm. Tohle je, mimochodem, asi tak desáté vlákno poradny, kde lidé sveřepě ignorují možnost nahradit středník za '+' v argumentech find. :-)

Josef Kufner avatar 25.2.2018 22:28 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
Jo, o tomhle se moc nemluví. Dobré vědět.
Hello world ! Segmentation fault (core dumped)
26.2.2018 18:57 karlik
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
No nevim jestli by to fungovalo bez xargs na více než milionu souborů v adresáři.
Josef Kufner avatar 26.2.2018 21:14 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
man find tvrdí:
The command line is built in much the same way that xargs builds its command lines.
Hello world ! Segmentation fault (core dumped)
27.2.2018 09:14 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky

Samozřejmě, že ano. Nikde se přece netvrdí, že se ten příkaz spustí právě jednou. Spustí se tolikrát, kolikrát je to potřeba s ohledem na limit velikosti polí argv na daném systému.

25.2.2018 18:40 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky

Ten středník je zbytečný. Použij -exec rm '{}' +

(Totéž platí pro všechny příkazy, které přijímají v argumentech seznam souborů.)

26.2.2018 16:31 R
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
Ten exec je zbytocny, pouzi -delete.
22.2.2018 14:15 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Jak upravit skript - existujici linky
Odpovědět | | Sbalit | Link | Blokovat | Admin
man ln
-f, --force
              remove existing destination files

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.