Portál AbcLinuxu, 13. května 2025 22:40
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 find
u 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 }) doneJsi 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.