bash脚本,用于设置目录和文件的权限

时间:2019-02-05 18:08:59

标签: bash

您能否帮助我创建bash脚本,以便:在所有具有已定义扩展名的文件的脚本参数中,将目录的权限设置为第二个脚本参数,并将其定义为扩展名的第三个参数。脚本。

2 个答案:

答案 0 :(得分:1)

由于您可能不熟悉bash和解析传递给脚本的参数,因此我将向您展示一种基本的方法来完成您描述的内容。

class NightWatch :
   INotification<ArrowEvent>, INotification<GunEvent>, INotification<OwlEvent>
{}

如果将其另存为#!/bin/bash # stop execution of the script if an error occurs suchs as when the # directory in argument 1 does not exists set -e dir=$1 # get the directory from the first argument ext=$2 # get the extension from the second argument perms=$3 # the third argument is the permissions you're going to pass to `chmod` cd "$dir" # change directory to the target directory # use regular filename expansion with the extension in # $ext and supply `chmod` with the permissions in $perms chmod "$perms" *"$ext" 并使其可执行,则可以这样运行:

extchmod.sh

这将更改权限扩展为$ ./extchmod.sh target_directory .txt 644 $ ./extchmod.sh target_directory .sh 755 的{​​{1}}中的所有文件和权限扩展为755的所有文件(其扩展为target_directory的所有文件)。

我应该注意,在bash / sh中,$ 1具有第一个参数的值,$ 2具有第二个参数的值,依此类推。 $ @将始终是包含所有参数的数组。

答案 1 :(得分:1)

我建议同时使用findxargs

  • 目录:/ home / mirko / example /
  • 文件扩展名:.jpg
  • 文件模式:644

$ find /home/mirko/example/ -maxdepth 1 -name '*.jpg' -print0 | xargs -0 chmod 644

如果您仍然想要一个shell脚本,我建议使用以下内容:

#!/usr/bin/env bash

scriptname=$(basename $0)

if [ $# -ne 3 ]; then
    echo "usage: $scriptname path extension mode" >&2
    echo "example: $scriptname /home/foo/pictures/ jpg 644" >&2
    exit 1
fi

directory=$1
extension=$2
mode=$3

find "$directory" -maxdepth 1 -name "*.${extension}" -print0 | xargs -0 chmod "$mode"

if [ $? -ne 0 ]; then
    echo "$scriptname: ERROR: command returned unsuccesfull" >&2
    exit 1
fi