我遇到了這個腳本的問題。該腳本應該通過所有文件和所有子目錄和子文件(遞歸)。如果文件以擴展名.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