在Bash中将通配符匹配用作命令行参数
我正试图编写一个Bash脚本来转换一堆文件 假设我有一个目录在Bash中将通配符匹配用作命令行参数,bash,loops,command-line,wildcard,Bash,Loops,Command Line,Wildcard,我正试图编写一个Bash脚本来转换一堆文件 假设我有一个目录/path/to/my files/,其中包含三个文本文件:a b.txt、c d.txt和e.txt(注意空格) 我需要能够像这样调用脚本: $ ./myscript.sh /path/to/my\ files/*.txt dest='/desktop/' for ARG in $@; do /some/other/script $ARG $dest$ARG.new done 然后在bash中循环处理它们,如下所示: $ ./
/path/to/my files/
,其中包含三个文本文件:a b.txt
、c d.txt
和e.txt
(注意空格)
我需要能够像这样调用脚本:
$ ./myscript.sh /path/to/my\ files/*.txt
dest='/desktop/'
for ARG in $@; do
/some/other/script $ARG $dest$ARG.new
done
然后在bash中循环处理它们,如下所示:
$ ./myscript.sh /path/to/my\ files/*.txt
dest='/desktop/'
for ARG in $@; do
/some/other/script $ARG $dest$ARG.new
done
它不必像这样工作,任何最简单的方法都会产生类似的结果,Bash在执行命令之前进行通配符扩展,即用匹配文件列表替换该表达式。这是否满足您的需要:
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
“$@”
让我走到了一半。理想情况下,我希望$ARG只包含文件名,这样$dest$ARG
就不会有太大的路径。有没有一种简单的方法可以做到这一点?你甚至可以将ARG的代码缩短为代码>-默认情况下使用$@
。