На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
kotnaton
Сообщения: 234
Сообщение
kotnaton » 05.07.2016 23:31
Такая ошибка частенько мне попадается, но не знаю как её обойти. Вот, в очередной раз:
строка типа:
Вызывает ошибку, если есть в именах пробелы:
Код: Выделить всё
cat: /media/iso/foto: Нет такого файла или каталога
cat: and: Нет такого файла или каталога
cat: mem: Нет такого файла или каталога
cat: booklet: Нет такого файла или каталога
cat: jpg/ВДНХ: Нет такого файла или каталога
cat: 1974.jpg: Нет такого файла или каталога
Как можно "экранировать" выданные в поиске имена ?
бывает же такое ???
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 05.07.2016 23:48
find "$POINT" -type f -exec cat {} +
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
Vascom
Сообщения: 1699
ОС: Fedora 32
Сообщение
Vascom » 06.07.2016 09:56
Если в переменной содержатся или могут содержаться пробелы - бери её в кавычки.
Лучше вообще все переменные по возможности заключать в кавычки.
kotnaton
Сообщения: 234
Сообщение
kotnaton » 07.07.2016 01:37
Vascom писал(а): ↑ 06.07.2016 09:56
Лучше вообще все переменные по возможности заключать в кавычки.
А я так давно и делаю
Но далеко не всегда помогает, к примеру в find:
Код: Выделить всё
find "$f" -name "*.tar.*" -exec sh -c "printf '\n%.0s' {1..3} >> tmp ; echo "{}" >> tmp ; tar tvf {} >> tmp" \;
find "$f" -regex '.*\.\(zip\|rar\|7z\|arj\|cab\|chm\)' -exec 7z l "{}" >> tmp \;
Первая команда даёт ошибку "с пробелами", вторая - нет. Разница естественно в оболочке sh для нескольких инструкций exec...
бывает же такое ???
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 07.07.2016 10:16
kotnaton писал(а): ↑ 07.07.2016 01:37
Разница естественно в оболочке sh для нескольких инструкций exec...
А зачем?
find "$f" -name '*.tar.*' -exec printf '\n\n\n' \; -exec echo {} \; -exec tar tvf {} \; >> tmp
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик