在 BASH 中打印具有可变路径的文件夹的内容

Print content of a folder with a variable path in BASH

在我的 bash 脚本中,我需要检查一个文件夹的内容,但是它的路径可以随着树的不同而改变 "endings"

最初我的文件夹是:

/home/myuser/my_folder

然后用户可以用树形可能的结尾修改我的文件夹的名称

/home/myuser/my_folder_aaaa
/home/myuser/my_folder_bbbb
/home/myuser/my_folder_cccc

因此,用户可以添加“_aaaa”或“_bbbb”“_cccc”

这些后缀是已知的。

在我的 bash 脚本中,我如何检查 "ls" 我的文件夹的内容,以防有人更改名称? N.B: 我只需要检查这个文件夹,所以如果有一个名为“/home/myuser/my_folder_ssss”的文件夹肯定不匹配并且不能显示内容

看来您需要这样的东西:

ls -1 | egrep "^my_folder(|_aaaa|_bbbb|_cccc)$"

此命令打印指定文件夹的名称(如果存在)。

ls -1 每行打印目录中的所有项目名称。

egrep 检查项目名称是否匹配 my_foldermy_folder_aaaamy_folder_bbbbmy_folder_cccc.

那你就可以用这个名字为所欲为了。例如,您可以检查内容:

ls -l `ls -1 | egrep "^my_folder(|_aaaa|_bbbb|_cccc)$"`

如果要显示文件夹内容,且已知后缀列表不是太长,试试这个:

ls -d /home/myuser/my_folder/* /home/myuser/my_folder/.* /home/myuser/my_folder_aaaa/* /home/myuser/my_folder_aaaa/.* /home/myuser/my_folder_bbbb/* /home/myuser/my_folder_bbbb/.* /home/myuser/my_folder_cccc/* /home/myuser/my_folder_cccc/.* 2>/dev/null

-d: 不列出目录内容。

2>/dev/null:将标准错误重定向到/dev/nullls 不会显示有关不存在目录的错误消息。

请注意,在脚本中首选 find

您可以在 find 中使用正则表达式谓词并在正则表达式匹配时执行 ls:

find /home/myuser/ -regex ".*/my_folder\(_aaaa\|_bbbb\|_cccc\)$" -exec ls "{}" ";"

以下将 ls -l 符合您描述中模式的文件夹

    ls /home/myuser/my_folder_* | grep "aaaa\|bbbb\|cccc" | while read x; do ls -l ${x:0:-1}; done