我有一个执行以下任务的脚本:在目录中搜索符合确定条件的文件。
find Documents/Files/Logfiles/ -mtime +1d -type f '(' -name '*.log' -or -name '*[0-9].*' ')' -delete
现在我想为该脚本创建一个配置文件,您可以在其中自己修改扩展名、修改时间或文件名。
我以前从未创建过配置文件,而且对 zsh 还很陌生,所以我不知道该怎么做。这里的挑战是我们应该按照这个文件为客户端使用的方式工作。
答案1
要为此脚本使用配置文件,这意味着该脚本必须从配置文件中读取一些参数。
配置文件config.txt:
path=.
extension=sh
modtime=1
filename=test
脚本文件:
#!/bin/bash
lines=$(<config.txt) #read config.txt
for line in $lines; do # parse each line and extract param-value keys
if [[ $line = *"="* ]]; then # if a word contains an "="...
vars[${line%%=*}]=${line#*=} # then set it as an associative-array key
fi
done
find ${vars[path]} -mtime ${vars[modtime]} -type f "(" -name "*.${vars[extension]}" -or -name "${vars[filename]}.*" ")"
另一种解决方案是使用带有参数的脚本并指定路径、扩展名、修改时间或文件名,如下所示:
#!/bin/bash
help()
{
echo ""
echo "Usage: $0 -p Path -e fileExtension -m modificationTime -f fileName"
echo -e "\t-path Path where to search for"
echo -e "\t-ext file name extension"
echo -e "\t-modtime modification time e.g. +1d "
echo -e "\t-filename file name"
exit 1 # Exit script after printing help
}
while getopts "p:e:m:f:" opt
do
case "$opt" in
p ) pathFile="$OPTARG" ;;
e ) extension="$OPTARG" ;;
m ) modifyTime="$OPTARG" ;;
f ) fileName="$OPTARG" ;;
? ) help ;; # Print help in case parameter is non-existent
esac
done
# Print help in case parameters are empty
if [ -z "$pathFile" ] || [ -z "$extension" ] || [ -z "$modifyTime" ] || [ -z "$fileName" ]
then
echo "Empty parameter(s), please check them...";
help
fi
find $pathFile -mtime $modifyTime -type f "(" -name "*.$extension" -or -name "$fileName.*" ")"