【发布时间】:2023-12-06 12:17:02
【问题描述】:
我想传递与某些通配符或正则表达式匹配的文件。以这种方式将文件名传递给脚本是否可以接受?
mse -s /media/hagbard/hc1/a1-chaos/amvib/A*
-s 是一个选项,但 /media/hag/hc1/a1-chaos/amvib/A* 将构成多个文件名,一个接一个。
目前我正在使用以下内容解析参数,但必须注意 -s 选项,因此它不会只捕获一个值。
这可能是有道理的,除非有很多文件。如果要处理的 args 文件太多,我需要能够传递和解释某种形式的通配符或正则表达式,这也需要适当的选项和相关的解析方案。
#!/bin/bash
IFSPREV="$IFS"
IFS="="
set -- $*
IFS="$IFSPREV" # Set original IFS
local iarg=0
local narg="$#"
while (( narg > 0 )); do
opt="$1"
iarg=$(( iarg + 1 ))
case $opt in
("-s"|"--src"|"--source") src="$2" ; shift 2 ;;
("-d"|"--dst"|"--destin") dst="$2" ; shift 2 ;;
("--") shift 1 ; break ;;
(-*) printf '%s\n' "Unknown option: $1" ; shift 1 ;;
(*) break ;;
esac
done
for name in "$src"; do
rsync -av --update "$src" "$dst"
done
【问题讨论】:
-
请添加合适的 shebang (
#!/bin/bash),然后将您的脚本粘贴到 shellcheck.net 并尝试实施那里提出的建议。
标签: bash arguments wildcard glob