Hoi,
Sinds ik een Mac heb, ben ik ook wat aan het scripten geslagen in bash. Dit vnl. om alledaagse taken te automatiseren en zeker ook ter leering ende vermaeck. Zo heb ik hier een script dat alle extended attributes verwijdert, in de huidige directory of recursive. Of "verbose" die de output niet naar /dev/null stuurt (voor het debuggen) - althans dat zou het moeten doen (ik wil wel mijn eigen "echo" commands als output zien, maar niet de command output).
Wat de code doet:
Sinds ik een Mac heb, ben ik ook wat aan het scripten geslagen in bash. Dit vnl. om alledaagse taken te automatiseren en zeker ook ter leering ende vermaeck. Zo heb ik hier een script dat alle extended attributes verwijdert, in de huidige directory of recursive. Of "verbose" die de output niet naar /dev/null stuurt (voor het debuggen) - althans dat zou het moeten doen (ik wil wel mijn eigen "echo" commands als output zien, maar niet de command output).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| ## Delete extended attributes (in current, and sub-folders)
delattrs() {
# -r = apply recursively
if [ $# > 0 -a "$1" = "-r" ]; then
local recursiveLs="ls -l@R";
else
local recursiveLs="ls -l@";
fi
for i in $(${recursiveLs} | grep '^ ' | awk '{print $1}' | sort -u);
do
# -r = apply recursively
if [ $# > 0 -a "$1" = "-r" ]; then
local recursiveXattrs="-r ";
else
local recursiveXattrs="";
fi
echo "Removing $i"
# -v = verbose output
if [ $# > 0 -a "$1" = "-v" ]; then
sudo xattr -d $recursiveXattrs $i *
else
sudo xattr -d $recursiveXattrs $i * > /dev/null;
fi
done
} |
Wat de code doet:
- een lijst genereren van extended attributes (die hebben een tab als prefix in de extended ls listing)
- over die extended attributes itereren en die in alle files (evt. recursief) verwijderen
- Zoiets als "parameter handling", het gebruik van parameters wordt niet flexibel opgelost en ik kan nu zelfs maar 1 parameter tegelijk gebruiken (-r of -v). Een heleboel if-then constructies lijkt me niet de bedoeling.
- Het gebruik van -r in ls en -R in xattr is inconsistent vanuit deze commands zelf, maar hoe zou ik daar beter mee om kunnen gaan?
- De command xattr lijkt zich niets aan te trekken van > /dev/null: hij geeft een error als xattr een bepaalde attribute niet vindt.
- Hij geeft als file parameter voor xattr een "*", idealiter zou in plaats daarvan precies de files gegeven worden die dat extended attribute hebben.