Я новичок в bash, и я работаю над скриптом, который проходит файл tar.gz, и в каждом файле изменяется строка, указанная для другой строки. Арги сценария: имя архива, искомая строка, целевое слово. Моя проблема заключается в том, что когда имя архива содержит пробел (например, я запускаю скрипт со следующими аргументами:> change_strings.sh "/tmp/tmp.m7xYn5EQ2y/work/data txt" a A) У меня есть следующая ошибка: on line 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
КРОССПОСТИНГ: http://unix.stackexchange.com/q/164328/74329 – Cyrus