The shell is like the command-prompt in Windows. Sort of. My favourite shell is bash.
If you use CTRL+Z, 'bg' or '&' to pause or send jobs to background, you may want to kill these jobs at some point. Typing 'jobs' will give you the current list of stopped or running jobs. The number in square brackets (for example, "[1]") is the job number, and this particular job can be killed using kill %1.
I wanted to make separate zip files for all of the folders in a directory.
for x in *; do zip -r ${x}.zip $x; mv ${x}.zip ../tar; done
Because of the size of my dataset I wanted to split it in four, so I could run two in parallel on two dual-processor machines. The dataset was contained in 3542 files. Here is my not-entirely-elegant solution:
ls mydir/* > tmp.txt split --lines=886 tmp.txt mysplit cd mydir mkdir ../split1 cp `cat ../mysplita` ../split1
Ever want to jump between two or more folders easily without having to type the complete path every time? Or want to quickly open a new shell window in the same folder as your current window? Wondering what the story is with all the questions?
The following scripts allow you to perform these tasks easily. Simply type
push here
in any folder, and typing
pop here
will change directory back to that folder. You may prefer to use a name other than 'here'. The folder names are stored in a simple text file (see the scripts for details). Place 'push' and 'mypop' into any folder on the path, and add the following to your ~/.bashrc:
function pop { cd `mypop $1` }
Here's mypop.
#!/bin/sh # Pops the directory associated with 'tag' and makes it the current # directory. # requires the following in your .bashrc: # alias pop 'cd `mypop \!^`' # Then you can use: pop mytag # or echo `mypop mytag`, or cat `mypop mytag`/readme.txt mylist="/home/no228/bin/popdirlist.txt" if [ -z "$1" ]; then echo " Syntax: pop n (where n is a tag)" exit 1 fi if [ -f $mylist ]; then grep "^$1" $mylist > $mylist.tmp if [ ! -s $mylist.tmp ]; then echo "No such tag" else awk '{print $2}' $mylist.tmp fi else echo " There isn't anything to pop!" exit 1 fi
And push.
#!/bin/sh # Pushes the current directory into a 'memory slot' indexed by a tag # See also 'pop' mylist="/home/no228/bin/popdirlist.txt" if [ -z "$1" ]; then echo " Syntax: push n (where n is a tag)" exit 1 fi if [ -f $mylist ]; then grep -v "^$1" $mylist > $mylist.tmp fi echo "$1 `pwd`" >> $mylist.tmp sort $mylist.tmp > $mylist rm $mylist.tmp
If you want to see whether any other users are logged on (and what they are doing), and you dislike the lack of information that 'users' gives, try this:
ps -Af | egrep `ls /home | awk 'BEGIN {ORS="|"} {print $0}' | awk '{print substr($0,0,length($0)-1)}'` | grep -v `whoami`
It works by taking the usernames from the list of folders in /home, and grepping against the output of 'ps'.
Put this in your startup script to prevent your computer beeping every time you autocomplete, or hit backspace too many times:
xset -b