find и ошибка с пробелами...

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

kotnaton
Сообщения: 228

find и ошибка с пробелами...

Сообщение kotnaton » 05.07.2016 23:31

Такая ошибка частенько мне попадается, но не знаю как её обойти. Вот, в очередной раз:

строка типа:

Код: Выделить всё

cat $( find $POINT -type f )


Вызывает ошибку, если есть в именах пробелы:

Код: Выделить всё

cat: /media/iso/foto: Нет такого файла или каталога
cat: and: Нет такого файла или каталога
cat: mem: Нет такого файла или каталога
cat: booklet: Нет такого файла или каталога
cat: jpg/ВДНХ: Нет такого файла или каталога
cat: 1974.jpg: Нет такого файла или каталога


Как можно "экранировать" выданные в поиске имена ?
бывает же такое ???
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15809
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: find и ошибка с пробелами...

Сообщение Bizdelnick » 05.07.2016 23:48

find "$POINT" -type f -exec cat {} +
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Vascom
Сообщения: 1489
ОС: Fedora 30

Re: find и ошибка с пробелами...

Сообщение Vascom » 06.07.2016 09:56

Если в переменной содержатся или могут содержаться пробелы - бери её в кавычки.
Лучше вообще все переменные по возможности заключать в кавычки.
Спасибо сказали:

kotnaton
Сообщения: 228

Re: find и ошибка с пробелами...

Сообщение kotnaton » 07.07.2016 01:37

Vascom писал(а):
06.07.2016 09:56
Лучше вообще все переменные по возможности заключать в кавычки.


А я так давно и делаю :D Но далеко не всегда помогает, к примеру в 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
Модератор
Сообщения: 15809
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: find и ошибка с пробелами...

Сообщение 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
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали: