在 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_folder
或 my_folder_aaaa
、my_folder_bbbb
、my_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/null
; ls
不会显示有关不存在目录的错误消息。
请注意,在脚本中首选 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
在我的 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_folder
或 my_folder_aaaa
、my_folder_bbbb
、my_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/null
; ls
不会显示有关不存在目录的错误消息。
请注意,在脚本中首选 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