Как отправить вывод преобразования в перезаписываемый каталог в ударе?

Я хочу преобразовать .tbl файлы к .csv в /data/ каталог, который у меня есть доступ только для чтения. Я использую эту команду:

for i in `ls *.tbl`; do
    sed 's/|$//' $i > ${i/tbl/csv}
    echo $i
done

Но я добираюсь:

-bash: supplier.csv: Permission denied

И я не знаю, как изменить сценарий, таким образом, что он мог сохранить вывод в перезаписываемом каталоге. Какая-либо идея, как решить его?

2
задан 23 November 2018 в 19:11

2 ответа

Просто укажите другой путь:

for tbl in *.tbl ; do
    sed 's/|$//' "$tbl" > /another/path/"${tbl%.tbl}".csv
    echo "$tbl"
done

Немногие незначительные меры:

  1. Не анализируйте вывод ls, просто выполните итерации по расширенному подстановочному шаблону.

  2. Переменные двойной кавычки (имена файлов могут содержать пробел).

  3. Я использовал, Удаляют Соответствие Суффиксу вместо Замены.

4
ответ дан 2 December 2019 в 01:31

Просто укажите путь (здесь /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.

4
ответ дан 2 December 2019 в 01:31

Другие вопросы по тегам:

Похожие вопросы: