用于显示列表中的目录和内容的Shell脚本

时间:2017-09-01 20:45:37

标签: linux bash shell unix

用于在列表中显示目录和内容的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。文件夹名称下使用的符号不必是'>' ,我刚刚使用它,所以当使用' - '时它没有制造子弹。

2 个答案:

答案 0 :(得分:1)

显示您所询问的信息的最简单方法是使用您希望以层次结构形式查看所有内容的目录中的$ tree命令。

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

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

如果使用mac

$ brew update
$ brew upgrade
$ brew install tree 

此命令将显示所有目录,在您运行tree命令的目录下的子目录

希望这会有所帮助

答案 1 :(得分: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

详细说明:

该脚本只查找README.txt以下两级的所有$topdir个文件(这将是您的Projects目录)并迭代这些文件。

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

printf语句根据您的规范格式化并输出数据。

我在这里使用basenamedirname,但是有些人认为使用变量替换更好(它肯定更快)。但是,为了清楚起见,我保持这些。