用于for循环的ksh wildcard filename参数

时间:2017-01-31 16:32:24

标签: ksh

我正在尝试编写一个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中的文件运行它时也可以。

2 个答案:

答案 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