Hi_Amos
坚持每天都在进步!!

工作中经常遇到关于目录方面的问题,例如,如何只列出当前目录下的所有目录,以及如何快速高效切换目录,而不需要使用鼠标,下面将简单介绍关于这两方面的解决方案:

一、如何只列出目录?

看似简单的任务,其实就算是linux水平不错的人都有可能被这个问题难住。

下面介绍4种方法列出当前路径下的目录:

1.ls -d *

amosli@amosli-pc:~$ ls -d *
%APPDATA%     develop           many                    sorted.txt  workspace
bank          Documents         Music                   space       下载
c:javagc.log  Downloads         Navicat                 Templates   图片
cnblogs       eclipse222        Pictures                temp.png    桌面
data.txt      examples.desktop  project                 tmp
da.txt        gitrepo           Public                  tmp.zip
ddd           home              scriptfifo              Ubuntu One
Desktop       learn             socialcredit_metrix.py  Videos

2. find . -type d -maxdepth 1

如果不加-maxdepth 参数的话那么将会有无穷多目录被列出来。

amosli@amosli-pc:~$ find . -type d -maxdepth 1
.......
./Videos
./Public
./%APPDATA%
./.kde
./.gnome2
./Music
./.local
./.pip
./Documents
./many
./develop
./Pictures
./.mozilla
./eclipse222
./.qq2012
./tmp
./gitrepo
./.netbeans
./.macromedia
./.thumbnails
./.sunpinyin
./learn
./.compiz-1
./桌面
.......

3.ls -F | grep '/$'

使用linux管道命令,grep查找 '/$' 以/结尾的,也即是目录

amosli@amosli-pc:~$ ls -F | grep '/$'
%APPDATA%/
bank/
Desktop/
develop/
Documents/
Downloads/
eclipse222/
gitrepo/
learn/
many/
Music/
Navicat/
Pictures/
project/
Public/
space/
Templates/
tmp/
Ubuntu One/
Videos/
workspace/
下载/
图片/
桌面/

4.ls -l | grep '^d'

amosli@amosli-pc:~$ ls -l | grep '^d'
drwxr-xr-x  3 amosli amosli   4096  6月 22  2013 %APPDATA%
drwxr-xr-x 36 amosli amosli   4096 12月 20 17:44 bank
drwxr-xr-x  4 amosli amosli   4096 12月 28 00:33 Desktop
drwxrwxr-x 13 amosli amosli   4096 12月 21 19:11 develop
drwxr-xr-x  3 amosli amosli   4096  7月  9 00:58 Documents
drwxr-xr-x  5 amosli amosli   4096 12月 26 21:25 Downloads
drwxr-sr-x 10 amosli amosli   4096  7月  4 13:35 eclipse222
drwxrwxr-x  2 amosli amosli   4096  7月 16 10:30 gitrepo
drwxrwxr-x  8 amosli amosli   4096 12月 28 23:16 learn
drwxr-xr-x  4 amosli root     4096  6月 25  2013 many
drwxr-xr-x  2 amosli amosli   4096 12月  8 22:00 Music
drwxr-xr-x  3 root   root     4096  8月 13 20:41 Navicat
drwxr-xr-x  2 amosli amosli   4096 12月  8 22:00 Pictures
drwxrwxr-x 12 amosli amosli   4096 12月  8 00:06 project
drwxr-xr-x  2 amosli amosli   4096 12月  8 22:00 Public
drwxr-xr-x 10 amosli amosli   4096  8月 20 01:26 space
drwxr-xr-x  2 amosli amosli   4096 12月  8 22:00 Templates
drwxrwxr-x  4 amosli amosli   4096  8月 27 10:16 tmp
drwxrwxr-x  2 amosli amosli   4096  8月 20 00:19 Ubuntu One
drwxr-xr-x  2 amosli amosli   4096 12月  8 22:00 Videos
drwxr-xr-x  4 amosli amosli   4096 10月 18 00:36 workspace
drwxr-xr-x  6 amosli amosli  12288 12月 21 00:39 下载
drwxr-xr-x  2 amosli amosli   4096  9月  3 00:17 图片
drwxr-xr-x  9 amosli amosli   4096 12月 12 10:09 桌面

二、如何快速切换目录?

切换目录的方式有很多种,最常用的莫过于cd 命令了,但在没有GUI(图形用户界面),只能通过命令行进行访问的时候,就很难处理涉及多路径之间的跳转切换了。

这里介绍四个命令 pushd,popd,dirs,cd -

1.cd - 作用是快速切换到前一个目录,如下:

amosli@amosli-pc:~$ cd learn/fd/
amosli@amosli-pc:~/learn/fd$ cd -
/home/amosli

2.dirs:显示目录栈,列出当前堆栈中保存的目录列表

amosli@amosli-pc:~/learn/fd$ dirs
~/learn/fd

说明: dirs的 -p参数可以每行一个目录的形式显示堆栈中的目录列表
-v参数可以在目录前加上编号
注意:有 -v时,不添加 -p也可以每行一个目录的形式显示

amosli@amosli-pc:~/learn/fd$ dirs -p -v
 0  ~/learn/fd

入堆栈的目录位于最上面

3.pushd,popd命令介绍

pushd:切换到作为参数的目录,并把原目录和当前目录压入到一个虚拟的堆栈中

如果不指定参数,则会回到前一个目录,并把堆栈中最近的两个目录作交换

popd: 移除堆栈中最近的目录

amosli@amosli-pc:/$ pushd bin/
/bin /
amosli@amosli-pc:/bin$ pushd /home/amosli/learn/fd/
~/learn/fd /bin /
amosli@amosli-pc:~/learn/fd$ dirs -p -v
 0  ~/learn/fd
 1  /bin
 2  /
amosli@amosli-pc:~/learn/fd$ pushd /home/amosli/develop/
~/develop ~/learn/fd /bin /
amosli@amosli-pc:~/develop$ dirs -p -v
 0  ~/develop
 1  ~/learn/fd
 2  /bin
 3  /

上面使用pushd命令分别将 /、bin/ 、/home/amosli/learn/fd/ 、/home/amosli/develop/ 4个目录压入栈中,栈是后进先出的(LIFO,last in first out)的数据结构。

那么如何切换目录?

1)如果是直接pushd不加参数的话就直接切换到最近的目录

amosli@amosli-pc:~/develop$ pushd 
~/learn/fd ~/develop /bin /
amosli@amosli-pc:~/learn/fd$ 

2)pushd  +n

也可以后面跟上数字直接切换到相应的目录。如切换到/(根目录),如下:

amosli@amosli-pc:~/learn/fd$ pushd +3
/ ~/learn/fd ~/develop /bin
amosli@amosli-pc:/$ ls

如何移除目录?

1)popd 直接移除最近的一条目录

amosli@amosli-pc:/$ dirs -p -v
 0  /
 1  ~/learn/fd
 2  ~/develop
 3  /bin
amosli@amosli-pc:/$ popd
~/learn/fd ~/develop /bin
amosli@amosli-pc:~/learn/fd$ dirs -p -v
 0  ~/learn/fd
 1  ~/develop
 2  /bin

2)popd +n

直接跟上数字移除指定的目录

amosli@amosli-pc:~/learn/fd$ popd +1
~/learn/fd /bin
amosli@amosli-pc:~/learn/fd$ dirs -p -v
 0  ~/learn/fd
 1  /bin

 

 

posted on 2013-12-29 02:20  Hi_Amos  阅读(1107)  评论(0编辑  收藏  举报