Portál AbcLinuxu, 25. prosince 2025 10:26
find -size +1k -exec ln -s \{\} \{\}.odkaz \;
Nebude to fungovat na soubory s divnými znaky v názvu (např. mezery), tam by asi bylo vhodné použít xargs.
-exec je parametr příkazu find který to co je uvedené za tímto parametrem provede jako příkaz (pro každý nalezený soubor).
Asi jako když napíšete exec prikaz
Symboly {} budou nahraženy názvem aktuálně nalezeného souboru, neptejte se mě proč zrovna {} :D To by asi byla exkurze do historie. V příkazu je možné používat i středníky, takže celý ten příkaz se musí ukončít \; což je escapovaný středník, tedy něco jako středník ale ne středník ;)
Někdo {} také escapuje, momentálně mě nenapadá proč.
Někdo {} také escapuje, momentálně mě nenapadá proč.Kdysi mi nějaký shell vynadal, protože znaky { a } nějak interpretoval. Od té doby je ve findu vždy escapuji. Ale teď jsem to zkoušel v zsh, bash a sh, a všude to projde… Takže někdo to escapuje prostě ze zvyku
#!/usr/bin/env bash
for FILE in $(find * -size +1k)
do
ln -s $FILE $(echo $FILE | \
awk 'BEGIN { FS="/" } { print $NF })
done
Jsi si jist tou hvezdickou? Nemel by jsi spise pouzit '/' jako path, pokud chces vyhledat vsechny soubory vetsi 1Kib?
. jako pro projdení všech souborů a adresářů rekurzivně počínaje aktuálním, někdo nepíše nic , což se chová stejně jako aktuální adresář, a použití hvězdičky * bude asi fakt z neznalosti ale v důsledku to najde všechny neskryté soubory a adresáře + rekurze v aktuálním adresáři, takže jediný zádrhel by asi byl kdyby autor chtěl uvažovat i .dotfiles v aktuálním adresáři, pak by měl problém. (Předpokládám standardně nastavený globbing.)
P.S. k tomu $(echo $FILE | omg, awk 'BEGIN { FS="/" } { print $NF }) chybí vám tam ukončovací apostrof ', ale imho je to typický příklad pro
basename '$FILE'
nebo
${FILE##*/}
Jinak samozř. jestli se mají vyrábět linky v aktuálním adresáři na nalezené soubory, tak by jako startovací měl být nějaký adresář aby to nedělalo linky samy na sebe a navíc ještě nějak zařídit unkátnost jmen.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.