好的,我试图做的是用另一个单词更改文件中的某个单词。因此,如果运行像./prog.bash document1.txt document Document
这样的程序,它会在document.txt中查找,每次看到document
这个词时,它都会将其更改为Document
。
我成功完成了这项工作,但是如果用户输入文件夹名称,我必须递归浏览文件夹中的所有文件并更改所有文件,包括子目录中的文件。我目前的计划如下:
#!/bin/bash
function File {
filename=$1
echo "File $filename:"
cat $filename
if [ -w $filename ];
then
echo "Changed into:"
sed -i 's/'$old'/'$new'/g' $filename
cat $filename
else
echo "File not changed due to lack of write permissions"
fi
}
function directory {
name=$1
for f in $name/*; do
if [ -f $f ];
then
File $f
elif [ -d $f ];
then
directory $d
fi
done
}
filename=$1
old=$2
new=$3
if [ ! -e $filename ];
then
echo "This file or folder does not exist"
exit
elif [ -f $filename ];
then
File $filename
elif [ -d $filename ];
then
directory $filename
fi
exit
我当前的文件夹/文件树如下所示:
Folder
|
-------------|-----------------------------------------
| Folder3 | |
Folder2 | Document1 Document2
| Folder4
Document3 |
|
-------------|---------------------
| |
Folder5 Document4 Document5
因此,当我使用./prog.bash Folder document Document
调用该程序时,它需要查找所有5个文档中的更改。但目前它只查找文档1和文档2中的更改,然后查找分段错误。我理解为什么这个程序不起作用,但我无法弄清楚我如何搜索所有子目录。任何帮助或正确方向上的一点都会非常感激。
答案 0 :(得分:0)
您需要熟悉“查找”命令。它是标准的Unix,用于遍历整个目录树。试试find .
,您就会开始明白这个想法。接下来尝试find . -name \*.txt
。越来越近 :-)。最后:
find . -name \*.txt -exec ./prog.bash {} document Document \;