在Bash中使用通配符匹配作为命令行参数

时间:2011-07-15 08:26:53

标签: bash loops command-line wildcard

我正在尝试编写一个Bash脚本来转换一堆文件。

假设我有一个目录/path/to/my files/,其中包含三个文本文件:a b.txtc d.txte.txt(请注意空格)

我需要能够像这样调用脚本:

$ ./myscript.sh /path/to/my\ files/*.txt

然后在bash中循环遍历它们,就像这样处理它们:

dest='/desktop/'
for ARG in $@; do
  /some/other/script $ARG $dest$ARG.new
done

它不必像这样工作,无论什么是最容易产生类似结果的

2 个答案:

答案 0 :(得分:5)

这是否符合您的要求:

dest='/desktop/'
for ARG in "$@"; do
  /some/other/script "$ARG" "$dest$ARG.new"
done

编辑:删除ARG上的路径

dest='/desktop/'
for ARG in "$@"; do
  /some/other/script "$ARG" "$dest$(basename "$ARG").new"
done

答案 1 :(得分:1)

Bash在执行命令之前执行通配符扩展,也就是说,它会用匹配文件列表替换该表达式。