目录路径作为bash中的命令行参数

时间:2013-11-22 18:09:42

标签: linux bash directory command-line-arguments

以下bash脚本从给定的目录路径中找到.txt文件,然后从.txt文件中更改一个单词(将山更改为海洋)

#!/bin/bash
FILE=`find /home/abc/Documents/2011.11.* -type f -name "abc.txt"`
sed -e 's/mountain/sea/g' $FILE 

在这种情况下,我得到的输出是正常的。 我的问题是,如果我想将目录路径作为命令行参数,那么它不起作用。假设,我将我的bash脚本修改为:

#!/bin/bash
FILE=`find $1 -type f -name "abc.txt"`
sed -e 's/mountain/sea/g' $FILE 

并调用它:

./test.sh /home/abc/Documents/2011.11.*

错误是:

./test.sh: line 2: /home/abc/Documents/2011.11.10/abc.txt: Permission denied

有人可以建议如何作为命令行参数访问目录路径吗?

2 个答案:

答案 0 :(得分:2)

你的第一行应该是:

FILE=`find "$@" -type f -name "abc.txt"`

在调用脚本之前将扩展通配符,因此您需要使用"$@"来获取它扩展到的所有目录,并将这些目录作为find的参数传递。

答案 1 :(得分:0)

您无需将.*传递给您的脚本。

让你的脚本像这样:

#!/bin/bash

# some sanity checks here
path="$1"

find "$path".* -type f -name "abc.txt" -exec sed -i.bak 's/mountain/sea/g' '{}' \;

然后运行它:

./test.sh "/home/abc/Documents/2011.11"

PS:了解如何使用-exec选项直接从查找内容调用sed。