我是bash的新手,我正在處理遍歷tar.gz文件存檔的腳本,並在每個文件中將指定的字符串更改爲另一個字符串。腳本的參數:存檔的名稱,搜索的字符串,目標詞。我有以下錯誤: 在線if [ ! -f $filename ] ; then
[我的問題是,當存檔名稱包含空格(例如我運行具有以下參數腳本:> change_strings.sh「/tmp/tmp.m7xYn5EQ2y/work/data txt」a A)我有以下錯誤: 在線if [ ! -f $filename ] ; then
[ :data:預期的二元運算符,dirname:額外的操作數'txt'。 這裏是我的代碼:目錄名稱Bash中的空格
#!/bin/bash
filename="${1##*/}"
VAR="$1"
DIR=$(dirname ${VAR})
cd "$DIR"
if [ ! -f $filename ] ; then
echo "no such archive" >&2
exit 1
fi
if ! tar tf $filename &> /dev/null; then
echo "this is not .tar.gz archive" >&2
exit 1
fi
dir=`mktemp -dt 'test.XXXXXX'`
tar -xf $filename -C $dir #extract archive to dir
cd $dir #go to argument directory
FILES=$dir"/*"
for f in $FILES
do
sed -i "s/$2/$3/g" "$f"
done
tar -czf $filename * #create tar gz archive with files in current directory
mv -f $filename $cdir"/"$filename #move archive
rm -r $dir #remove tmp directory
Crossposting:http://unix.stackexchange.com/q/164328/74329 – Cyrus 2014-10-26 15:47:10