zoukankan      html  css  js  c++  java
  • linux shell 脚本攻略学习15--如何只列出目录,如何快速切换目录

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

    一、如何只列出目录?

    看似简单的任务,其实就算是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
  • 相关阅读:
    Unity3D之Character Controller(CC)与GameObject的碰撞方法
    Unity3D之资源问题处理
    Unity3D之多个fbx导入场景, 合并多个动画
    Unity3D性能优化--- 收集整理的一堆
    批量删除
    Unity3D插件之Easy Touch 3.1(1): Easy Joystick
    Unity3D与iOS消息交互方法(1)--iOS接收Unity3D发出的消息
    爬虫 requests 模块
    Flask 模型操作
    11.4 Flask session,闪现
  • 原文地址:https://www.cnblogs.com/amosli/p/3496077.html
Copyright © 2011-2022 走看看