A reader writes:
First, thanks for writing Wicked Cool Shell Scripts. I’ve found them quite useful and I’ve learned many things from those scripts.
I just have a question and I was wondering if you could point me in the right direction.I’m trying to write a shell script that will pull the top-level directories out of a list of file paths, example:
list of files:
/usr/local/test
/usr/bin/test
/opt/Tivoli/dat
/opt/lib/test
/tmp/files/test
/tmp/local/testOutput after script:
/usr
/opt
/tmp
Initially I thought that this would be a perfect job for dirname, the partner to the better known basename utility. It’s not, though, because basename /usr/lib/test is “/usr/lib”, not just “/usr”. So instead, I’d use cut, a utility I write about in the book too. The cut utility lets you specify the delimiter for field separation and also lets you specify what field you’re interested in, so here’s what happens when we put all of that together:
$ echo /usr/lib/test | cut -d/ -f2 usr
You can drop that into a pipeline and if we assume that your list of files is itself in a file called “filelist”, you’re halfway there with this one line:
cut -d/ -f2 filelist
If you want to prepend the slash, you can do that with sed, but let’s tackle the “unique” part first with uniq. Since that particular utliity only works if the input is sorted, here’s the pipe I have:
cut -d/ -f2 filelist | sort | uniq | sed 's/^/\//'
That’ll do everything you want and it’s short enough to be an alias!
Hope that helps and good luck with your script writing efforts.
Extracting Directory Names within a Shell Script can be done using the following command
[janeesh@jansworld.in usr]# find /usr -type d -maxdepth 1
/usr
/usr/local
/usr/bin
/usr/share
/usr/games
/usr/ofed
/usr/lib
/usr/include
/usr/libexec
/usr/man
/usr/etc
/usr/kerberos
/usr/X11R6
/usr/src
/usr/sbin
This will list all the directories in /usr folder.
Hi, I have problem with some shell programing ,would you please help me?
1) I am trying to write a shell script in ksh to do like dir and shows directories
2)Is it possible to write a shell script in ksh with FOR to loop infinitely?
3)I want to write a shell script in ksh to mark every line(menu)that cursor is and show submenu.
thanks alot for your kindly attention
Good question, I tried this way:
[jsaikia@zorro trap]$ cat dir.names
/usr/local/test
/usr/bin/test
/opt/Tivoli/dat
/opt/lib/test
/tmp/files/test
/tmp/local/test
[jsaikia@zorro trap]$ cat dir.names | awk -F “/” ‘{print “/”$2}’ | sort | uniq
/opt
/tmp
/usr