Я хочу преобразовать .tbl
файлы к .csv
в /data/
каталог, который у меня есть доступ только для чтения. Я использую эту команду:
for i in `ls *.tbl`; do
sed 's/|$//' $i > ${i/tbl/csv}
echo $i
done
Но я добираюсь:
-bash: supplier.csv: Permission denied
И я не знаю, как изменить сценарий, таким образом, что он мог сохранить вывод в перезаписываемом каталоге. Какая-либо идея, как решить его?
Просто укажите другой путь:
for tbl in *.tbl ; do
sed 's/|$//' "$tbl" > /another/path/"${tbl%.tbl}".csv
echo "$tbl"
done
Немногие незначительные меры:
Не анализируйте вывод ls
, просто выполните итерации по расширенному подстановочному шаблону.
Переменные двойной кавычки (имена файлов могут содержать пробел).
Я использовал, Удаляют Соответствие Суффиксу вместо Замены.
Просто укажите путь (здесь /path/to/writable/dir/
) перед именем файла:
for i in *.tbl; do
sed 's/|$//' "$i" >"/path/to/writable/dir/${i/%tbl/csv}"
echo "$i"
done
Вы никогда не должны анализировать вывод ls
(Почему?) и всегда заключают переменные в кавычки как $i
здесь. Добавление %
в начале шаблона заставляет его соответствовать против конца строки так, чтобы имя файла как tbl.tbl
становится tbl.csv
вместо csv.tbl
. Читайте больше о расширении Параметра здесь на bash-hackers.org.