2017-09-01 97 views
0

Shell脚本显示目录和内容列表Shell脚本显示目录和内容列表

我有一个名为Projects文件夹,该文件夹中我有5个项目。为了这个问题,我只是简单地说它们被标记为:(Project1,Project2等)。当我的文件夹上运行ls我得到这个:(重新标注为简单起见):

Project1 Project2 Project3 Project4 Project5 

在这些5个文件夹,我在每个目录1个.txt文件。我怎样才能创建一个shell脚本来列出这样的文件夹中的内容:

1. Project1 
    > readme.txt 

2. Project2 
    > readme.txt 

3. Project3 
    > readme.txt 

4. Project4 
    > readme.txt 

5. Project5 
    > readme.txt 

所以基本上列出与计数器目录和父文件夹下单的子目录。

P.S.在文件夹名称下使用的符号不必是'>',我只是使用它,所以在使用' - '时不会创建子弹。

+1

'tree'命令执行此操作。您可能需要先安装它。 –

+0

这很酷。我从来没有听说过“树”,但当看它时,它看起来比我在例子中组织它的方式更冷。 – iamr00t

回答

1

显示信息最简单的方法就是使用要查看分层表单中所有内容的目录中的$ tree命令。

如果尚未安装(如果使用的Linux应该是)

$ sudo apt update 
$ sudo apt upgrade 
$ sudo apt install tree 

如果使用的是Mac

$ brew update 
$ brew upgrade 
$ brew install tree 

此命令将显示所有目录,该目录下面的子目录运行tree命令from

希望这会有所帮助

0
#!/bin/sh 

topdir='/tmp/shell-bash.DmgIjp5V' 
readme='README.txt' 
i=0 

for pathname in "$topdir"/*/"$readme"; do 
     project="$(basename "$(dirname "$pathname")")" 
     printf '%d. %s\n\t- %s\n\n' "$((++i))" "$project" "$readme" 
done 

测试设置:

bash-4.4$ mkdir Project{1..5} 
bash-4.4$ touch Project{1..5}/README.txt 

运行它:

bash-4.4$ sh script.sh 
1. Project1 
     - README.txt 

2. Project2 
     - README.txt 

3. Project3 
     - README.txt 

4. Project4 
     - README.txt 

5. Project5 
     - README.txt 

详情:

脚本只是寻找两个级别低于$topdir所有README.txt文件(这将是您的Projects目录)并重复这些。

project变量将在$topdir下保存项目目录的名称。

printf声明根据您的规格格式化并输出数据。

我在这里使用basenamedirname,但有些人认为使用变量替换更好(当然更快)。不过,为了清晰起见,我会保留这些内容。