以下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
有人可以建议如何作为命令行参数访问目录路径吗?
答案 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。