您能否帮助我创建bash脚本,以便:在所有具有已定义扩展名的文件的脚本参数中,将目录的权限设置为第二个脚本参数,并将其定义为扩展名的第三个参数。脚本。
答案 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)
我建议同时使用find
和xargs
$ 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