我正在尝试编写一个shell脚本,该脚本将采用带通配符的文件名,在当前目录中查找与该模式匹配的所有文件,然后复制它们。我的问题是,每当我尝试使用变量时,只使用第一个匹配的回声即可。
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-Ru");
Thread.CurrentThread.CurrentUICulture = New CultureInfo("ru-Ru");
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "dd-MM-yyyy";
这似乎只与第一个匹配,即使cust1.txt,cust2.txt和cust3.txt都存在,当我使用for cust * .txt中的文件运行它时也可以。
答案 0 :(得分:1)
shell扩展了你的参数" cust*.txt
"到列表然后将列表传递给您的脚本,然后脚本只处理$1
cust1.txt
。
您想使用$@
来处理所有传递的参数:
#! /usr/bin/ksh
for file in "$@"
do
echo "$file"
done
我认为通过这种方式可以传递多少参数是有限制的。你需要处理多少个文件?确保您的shell版本可以处理您可能处理的参数数量。如果我记得你可能需要一个使用xargs
的解决方案,但我有点生疏有助于此。
答案 1 :(得分:1)
在./copyfiles.ksh cust*.txt
中,文件cust * .txt将首先展开。
如果您不想更改copyfiles.ksh
脚本。用
./copyfiles.ksh "cust*.txt"
您还可以使用类似
的内容更改脚本IN_FILE="$@" # INFILES would be a better name