LINUX.ORG.RU

Cтранные апострофы в переменных после sed/awk/tr


0

0

Пытаюсь заменить пробелы на бекслеш с пробелом, и сед/авк/тр (все пробовал) добавляет какие-то странные апострофы в переменные, и соответственно никакие программы не понимают это как путь к чему-то.

Полный сабж тут: http://www.iphones.ru/forum/index.php?showtopic=18957

(Да-да, это для айфона, только не плюйтесь сразу)

Не плюйся сразу, но ты б лучше написал тут простой и короткий пример. Ведь вопрос по sed/awk/tr? Вот и не заставляй читателей ковырятся в поисках *вопроса*.

Напиши просто, типа такого:

$ echo "Hello world" |awk 'то и вот это'

выдаёт: Hello\' world

а хотелось бы: Hello\ world

alexsaa
()

> Для того чтоб выставить права нужно поменять все пробелы на

почему ты так думаешь??

dilmah ★★★★★
()
Ответ на: комментарий от Deleted

Спасибо :) Извините за то что пришлось ходить по ссылкам.

anonymous
()
Ответ на: комментарий от vsezanyato

Да, попробовал tr'нуть все ньюлайны на пробелы... Теперь chmod не может переварить такое количество информации:

: File name too long

vsezanyato
() автор топика
Ответ на: комментарий от vsezanyato

>> Теперь все ньюлайны поменялись на \n

Я смысл всего скрипта не понял, но вы тиам много чего делаете через
одно место. Допустим есть программа cmd, которая на stdout выдаёт
имена файлов, один файл - одна строка. Тогда:

cmd | while read file_name; do
    chmod 0123 "$file_name"
done

Deleted
()
Ответ на: комментарий от vsezanyato

Кстати проще ИМХО не пытаться парсить вывод unzip, а просто после распаковки пройтись по $OUTDIR find'ом и сделать всё что нужно. Если в $OUTDIR уже что-то есть, то лучше распаковку выполнить в другой каталог (где-нибудь в недрах /var/tmp например), сделать со свежераспаковынными файлами всё что нужно и потом переместить их куда надо.

Deleted
()
Ответ на: комментарий от vsezanyato

>> Там есть, и есть это OUTDIR="/" :) Сто процентов - через задницу

Тогда да, самый простой и правильный (опять ИМХО =)) способ - распаковывать во временную папку, обрабатывать и затем mv'ать на постоянное место жительства. Кстати примерно так работает emerge - система управления пакетами в Gentoo Linux.

Deleted
()
Ответ на: комментарий от Deleted

О, я знаю что такое Генту и Портедж :) Я бывший и будущий линуксоид, который одновременно является макюзером :)

vsezanyato
() автор топика
Ответ на: комментарий от vsezanyato

Ладно, сейчас попробую что-нить в О'Рейли глянуть.

vsezanyato
() автор топика
Ответ на: комментарий от vsezanyato

>> А не можете подкинуть примерчик?

Примерно вот так:

#!/bin/bash

ZIP_FILE="./test.zip"
TEMP_DIR="./tmp"
ROOT_DIR="."

mkdir -p "${TEMP_DIR}"
unzip -o "${ZIP_FILE}" -d "${TEMP_DIR}"

find "${TEMP_DIR}/" -type d -exec chmod -v 0775 '{}' \;
find "${TEMP_DIR}/" ! -type d -exec chmod -v 0644 '{}' \;

mv -v "${TEMP_DIR}"/* "${ROOT_DIR}/"

rm -rf "${TEMP_DIR}"

Deleted
()
Ответ на: комментарий от php-coder

пых__ты в Сизифе облажался и здесь не решил не отставать.

anonymous
()
Ответ на: комментарий от php-coder

>> cmd | xargs chmod 0123

В случае с сабжевым скриптом по ссылке этот вариант не подошёл бы, так как unzip кроме имён файлов ещё всякий хлам выдаёт. А внутри цикла его проще отсеивать.

Deleted
()
Ответ на: комментарий от php-coder

> cmd | xargs chmod 0123

этот вариант не заботится о пробелах вообще

>cmd | while read file_name; do
>    chmod 0123 "$file_name"
>done

а этот не заботится о пробелах в начале имени.

cmd | tr \\n \\0 | xargs -0 chmod 0123

dilmah ★★★★★
()
Ответ на: комментарий от Deleted

Блин, а я ведь забыл сказать. Мне нужно создать список со всеми распаковаными папками и файлами, для возможности удаления.

vsezanyato
() автор топика
Ответ на: комментарий от vsezanyato

>> Блин, а я ведь забыл сказать. Мне нужно создать список со всеми распаковаными папками и файлами, для возможности удаления.

find "${TEMP_DIR}/"

Выдаст весь список.

Deleted
()
Ответ на: комментарий от Deleted

Спасибо большое. 6 работоспособных строчек кода против 50 неработоспособных.

Мда, надо учить матчасть.

vsezanyato
() автор топика
Ответ на: комментарий от vsezanyato

Все. Полностью заработало, правда вместо mv использовал cp -rp.

vsezanyato
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.