过滤目录树并根据结果创建 bash 菜单

过滤目录树并根据结果创建 bash 菜单

我在云中有一个 Google Drive 文件夹,它与我的服务器同步,用于备份和恢复 WordPress Web 目录和 MySQL 数据库转储,我使用 rclone 完成此操作。我可以使用以下命令查看整个目录树:

root@ubuntu-server:~# rclone tree "Google Drive Backup:WordPress Backups"
/
└── 2020
    ├── November
    │   └── Sunday 29
    │       └── WordPress backup 29-11-20 (13.55.23).tar.gz
    └── October
        └── Thursday 15
            ├── WordPress backup 15-10-20 (12.15.11).tar.gz
            └── WordPress backup 15-10-20 (23.59.03).tar.gz

5 directories, 3 files

随着时间的推移,这个列表将会很大,所以我正在尝试实现一个过滤系统来减少它并找到我需要查看的文件。我创建了一个小脚本,它将询问一系列问题并根据用户的输入为某些变量设置值:

# Menu
clear
echo "What year would you like to see?"
read -p "Please enter the full year number below e.g. 2020:"$'\n> ' Year
clear
echo "What month would you like to see?"
read -p "Please enter the full month below (case sensitive) e.g. January:"$'\n> ' Month
clear
echo "What day would you like to see?"
read -p "Please enter the day below (requires two characters) e.g. 04:"$'\n> ' Day
clear

我本质上想获取命令的输出rclone tree,并使用变量中设置的值对其进行过滤。我目前有三个变量:

使用 grep 命令和变量之一过滤目录树的示例是:

rclone tree "Google Drive Backup:WordPress Backups" | grep $Month
rclone tree "Google Drive Backup:WordPress Backups" | grep November

我面临的问题是该文件夹中的子列表没有显示,我只剩下以下内容:

root@ubuntu-server:~# rclone tree "Google Drive Backup:WordPress Backups" | grep November
    ├── November

我在搜索时遇到问题,因为2020它应该列出子目录和孙目录,但我只剩下这个:

root@ubuntu-server:~# rclone tree "Google Drive Backup:WordPress Backups" | grep 2020
└── 2020

一旦目录树被过滤到证实数量,我想将每个列表变成 Bash 脚本菜单中相应的编号选项。脚本的用户只需在 CLI 中键入数字,该数字将与过滤列表中的文件相对应。这将节省尝试写出整个文件名路径的时间。如果没有应用过滤器,我会创建一个是/否提示警告,这将显示所有备份文件。如果他们决定列出所有备份,我想将列表限制为一次十行。我该如何实现这一目标?我考虑过使用more从 stdout 传送的命令来每页仅显示 10 个项目,例如:

root@ubuntu-server:~# ls / | more -10
bin
boot
dev
etc
home
lib
lib32
lib64
libx32
lost+found
--More--

但按回车键--More--不会跳下另外十行,而是一次只跳一行。

答案1

rclone tree是为了视觉化,而不是输入脚本。试试这个:

$ rclone ls "Google Drive Backup:WordPress Backups"

每行都有一个完整的路径名。现在您可以过滤November 2020

$ rclone ls "Google Drive Backup:WordPress Backups" | grep '-11-20'

相关内容