我需要编写一些shell脚本来获取以某些字母开头的所有目录并将结果列表保存在txt文件中
例如。
-全部大写的目录
-所有以“Ab”开头的目录
有什么建议吗?
答案1
目录全部大写:
shopt -s nullglob
for d in [[:upper:]]*/ ; do
echo "$d"
done > uppercase-dirs.txt
Ab
所有以:开头的目录
shopt -s nullglob
for d in Ab*/ ; do
echo "$d"
done > Ab-dirs.txt
欲了解更多信息,请参阅bash 手册的模式匹配部分。
请注意,您的目录可能包含不寻常的字符,例如换行符。在这种情况下,将每个目录作为新行回显到文本文件将会给出不正确的结果。解决这个问题的一种方法是使用 nul 字符来分隔每个目录。您可以使用 printf 来代替:
shopt -s nullglob
for d in Ab*/ ; do
printf "%s\0" "$d"
done
另请注意,shopt -s nullglob
当模式没有匹配项时,有必要处理这种情况。如果没有它,Ab*/
将扩展到Ab*/
如果没有匹配项,这不是您想要的。Ab*/
如果没有匹配项,则扩展为空字符串。
欲了解更多信息,请参阅shopt
bash 手册的一部分。