用于在列表中显示目录和内容的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。文件夹名称下使用的符号不必是'>' ,我刚刚使用它,所以当使用' - '时它没有制造子弹。
答案 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
语句根据您的规范格式化并输出数据。
我在这里使用basename
和dirname
,但是有些人认为使用变量替换更好(它肯定更快)。但是,为了清楚起见,我保持这些。