Вы можете использовать шаблоны в операторах case, однако вы не можете заключать их в кавычки, поэтому вам придется избегать пробелов.
case ${OS} in
"SUSE Linux Enterprise Server 11 SP4")
echo "SLES11 detected."
;;
Ubuntu\ 16.04.[3-4]\ LTS)
echo "UBUNTU16 detected."
;;
"CentOS Linux 7 (Core)")
echo "CENTOS7 detected."
;;
*)
echo "Unknown OS detected. Quitting for safety reasons."
exit -1
;;
Такого инструмента нет; но это UNIX, так что вы легко можете его создать.:-)
Не имея файлов README.md
, вместо этого я буду использовать .gitignore
в качестве файла в каждом подкаталоге для печати первой строки из:
find. -type d -printf '%30f ==> ' -exec sed q {}/.gitignore \;
Пример вывода:
control-DBs ==> autogen.h
basic ==> flarp.exe
postgresql ==> libpgstore.a
ui ==>.DS_Store
plugins ==> *.*~
-type d
:Мы ищем только подкаталоги. printf '%30f ==> '
:-printf
принимает кучу кодов, для вывода различной информации о файле(с технической точки зрения, каталог — это своего рода обрабатываемый файл ). Кодов достаточно, чтобы эмулировать вывод ls(1)
с более простыми опциями. Полный список см. в man find
или https://man7.org/linux/man-pages/man1/find.1.html. некоторые обязательные -есть %f
:базовое имя %s
:размер в байтах %m
:разрешение (или биты режима)-exec sed q {}/.gitignore \;
:Здесь мы даем find(1)
пользовательскую команду для выполнения для каждого обрабатываемого подкаталога. {}
обозначает путь к файлу sed q fff
— это один из способов распечатать первую строку файла «fff
» \;
сообщает find(1)
, где заканчивается пользовательская команда..gitignore
? find. -type d -exec [ -e {}/.gitignore ] \; -printf '%30f ==> ' -exec sed q {}/.gitignore \;
Мы снова обращаемся к -exec
за помощью. Допустим, обрабатываемый в данный момент подкаталог называется "ddd
"; тогда [ -e ddd/.gitignore ]
будет оцениваться как false, если в ddd/
нет .gitignore
. Как только проверка дает ложный результат, find(1)
сдается и переходит к следующему подкаталогу.