Вы можете использовать find
для создания своих аргументов - хотя и немного длинновато:
find -mindepth 1 ! -wholename './config' ! -wholename './config/*'
mindepth 1
, чтобы исключить ].
и два исключения полное имя
для самого каталога, а также его содержимого.
tar -xzf deploy/deploy.gz --exclude="deploy" \
$( find -mindepth 1 ! -wholename './config' ! -wholename './config/*' )
Вот фрагмент сценария оболочки, который выполняет задание:
# try various methods, in order of preference, to detect distro
# store result in variable '$distro'
if type lsb_release >/dev/null 2>&1 ; then
distro=$(lsb_release -i -s)
elif [ -e /etc/os-release ] ; then
distro=$(awk -F= '$1 == "ID" {print $2}' /etc/os-release)
elif [ -e /etc/some-other-release-file ] ; then
distro=$(ihavenfihowtohandleotherhypotheticalreleasefiles)
fi
# convert to lowercase
distro=$(printf '%s\n' "$distro" | LC_ALL=C tr '[:upper:]' '[:lower:]')
# now do different things depending on distro
case "$distro" in
debian*) commands-for-debian ;;
centos*) commands-for-centos ;;
ubuntu*) commands-for-ubuntu ;;
mint*) commands-for-mint ;;
*) echo "unknown distro: '$distro'" ; exit 1 ;;
esac
Вам может потребоваться более полезное действие по умолчанию ( *
) в операторе case
, чем печать сообщения об ошибке и прерывание .
Вы можете использовать :
cat /etc/os-release
или lsb_release -a
для Debiancat /etc/*-release
или lsb_release -a
для CentOS/Ubuntu. Попробуйте следующую команду :
cat /etc/*-release
или
lsb_release -a
Найдя только имя дистрибутива и версию:
cat /etc/issue