makespec revision 1.1
11.1Schristos#!/bin/sh 21.1Schristos# 31.1Schristos# Copyright (c) 2024 The NetBSD Foundation, Inc. 41.1Schristos# All rights reserved. 51.1Schristos# 61.1Schristos# This code is derived from software contributed to The NetBSD Foundation 71.1Schristos# by Christos Zoulas. 81.1Schristos# 91.1Schristos# Redistribution and use in source and binary forms, with or without 101.1Schristos# modification, are permitted provided that the following conditions 111.1Schristos# are met: 121.1Schristos# 1. Redistributions of source code must retain the above copyright 131.1Schristos# notice, this list of conditions and the following disclaimer. 141.1Schristos# 2. Redistributions in binary form must reproduce the above copyright 151.1Schristos# notice, this list of conditions and the following disclaimer in the 161.1Schristos# documentation and/or other materials provided with the distribution. 171.1Schristos# 181.1Schristos# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 191.1Schristos# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 201.1Schristos# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 211.1Schristos# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 221.1Schristos# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 231.1Schristos# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 241.1Schristos# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 251.1Schristos# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 261.1Schristos# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 271.1Schristos# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 281.1Schristos# POSSIBILITY OF SUCH DAMAGE. 291.1Schristos# 301.1Schristos# Create an mtree spec file with per file type defaults 311.1Schristos 321.1SchristosTYPES="b c d f l p s" 331.1Schristos 341.1Schristosgetmode() { 351.1Schristos case $1 in 361.1Schristos b|c) echo 0600;; 371.1Schristos d) echo 0755;; 381.1Schristos f) echo 0644;; 391.1Schristos l) echo 0777;; 401.1Schristos p|s) echo 0666;; 411.1Schristos *) echo "*error $1*";; 421.1Schristos esac 431.1Schristos} 441.1Schristos 451.1Schristosgettype() { 461.1Schristos case $1 in 471.1Schristos b) echo block;; 481.1Schristos c) echo char;; 491.1Schristos d) echo dir;; 501.1Schristos f) echo file;; 511.1Schristos l) echo link;; 521.1Schristos p) echo fifo;; 531.1Schristos s) echo socket;; 541.1Schristos *) echo "*error $1*";; 551.1Schristos esac 561.1Schristos} 571.1Schristos 581.1Schristosif [ -z "$1" ]; then 591.1Schristos echo "Usage: $0 <dir>" 1>&2 601.1Schristos exit 1 611.1Schristosfi 621.1Schristos 631.1Schristoscd "$1" 641.1Schristosfor i in $TYPES; do 651.1Schristos 661.1Schristos t=$(gettype $i) 671.1Schristos m=$(getmode $i) 681.1Schristos find . -type $i -exec \ 691.1Schristos printf "%s type=$t uname=root gname=wheel mode=$m\n" {} \; 701.1Schristos 711.1Schristosdone | sort 72