我遇到了这个脚本的问题。该脚本应该通过所有文件和所有子目录和子文件(递归)。如果文件以扩展名.txt结尾,我需要用新的字符/单词替换文本中的字符/单词,然后将其复制到现有目录中。第一个参数是我需要开始搜索的目录,第二个参数是旧的char/word,第三个是新的char/word,第四个是将文件复制到的目录。该脚本通过文件,但只做替换,并从原始目录复制文件。这是脚本递归Shell脚本和文件扩展名问题
#!/bin/bash
funk(){
for file in `ls $1`
do
if [ -f $file ]
then
ext=${file##*.}
if [ "$ext" = "txt" ]
then
sed -i "s/$2/$3/g" $file
cp $file $4
fi
elif [ -d $file ]
then
funk $file $2 $3 $4
fi
done
}
if [ $# -lt 4 ]
then
echo "Need more arg"
exit 2;
fi
cw=$1
a=$2
b=$3
od=$4
funk $cw $a $b $od
只要有文件/目录名称包含空格,您的代码就会中断。请参阅[这里](http://mywiki.wooledge.org/ParsingLs)以获取更详细的解释,为什么您不应该像在代码中那样使用'ls'。 –
你的问题没有说明什么是不工作的。也许这只是我的眼睛,但是你的要求和你对剧本做什么的描述似乎是相同的。 – innaM