工作中经常遇到关于目录方面的问题,例如,如何只列出当前目录下的所有目录,以及如何快速高效的切换目录,而不需要使用鼠标,下面将简单介绍关于这两方面的解决方案:
一、如何只列出目录?
看似简单的任务,其实就算是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