After having spent years on unix systems, shell scripting still continues to elude me. Hence these reminders.
- contents
For Loops over lists
- To add a bunch of files to subversion
for f in Button.phi Buttons.phi Cells.phi ; do svn add $f; done for f in `ls -l *.phi`; do svn add $f; done
- A more complete sample
ls *.xml file1.xml file2.xml file3.xml ls *.xml > list for i in `cat list`; do cp "$i" "$i".bak ; done ls *.xml* file1.xml file1.xml.bak file2.xml file2.xml.bak file3.xml file3.xml.bak
- To clear emails to [email protected] out of my mail queue after inspecting the affected files
cd /path/to/mailqueue ls -l `grep -l '[email protected]' \`find . -type f\`` rm -f `grep -l '[email protected]' \`find . -type f\``
Note: Be sure to run the ls before the rm.
- A little awking. PIDs of all processes using alsa. Grabs the 2nd column out of a listing.
lsof | grep alsa | awk '{print $2}'
- This alias produces a sorted list of services and the ports they’re listening on.
alias ports='sudo /usr/bin/lsof -nPi | grep LIST | awk '\''{printf "%-20s%-5s%-5s%s\n",$1,$5,$7,$8}'\'' | sort | uniq'
- Running ports would then produce something like this:
cupsd IPv4 TCP 127.0.0.1:631 master IPv4 TCP 127.0.0.1:25 mysqld IPv4 TCP 127.0.0.1:3306 portmap IPv4 TCP *:111 rpc.mount IPv4 TCP *:657 rpc.statd IPv4 TCP *:894 smbd IPv4 TCP *:139 smbd IPv4 TCP *:445 sshd IPv6 TCP *:22
While loop
- Keeping my mail inbox from overflowing while running email stress tests
cd /path/to/maildir/new while true; do rm -f *; sleep 5; done
The Absolute Current Working Directory
- AKA Getting the realpath of a location.
- This is really more useful in scripts, but here goes:
MYCWD=`dirname \`readlink -e $0\``
Getting a line count on various directories
T=0; \ for f in dir1 dir3 dir10; do \ N=0; \ for n in `find $f -type f -exec wc -l {} \; | awk '{print $1}'`; do\ N=$(( $M + $n )); \ done; \ T=$(( $T + $N)); \ echo $N - $f; \ done; \ echo $T - Total 4686 - dir1 4894 - dir3 981037 - dir10 990617 - Total