Закавычить find (вернее результат поиска)
Модератор: Модераторы разделов
-
- Сообщения: 34
- ОС: All
Закавычить find
развлекаюсь на bash
После поиска find выдает список файлов в имени или пути которых есть пробелы, что вызывает проблему дальнейшей обработки
Как проще закавычить этот полный путь с именем для всех результатьв поиска
для последующей обработки
После поиска find выдает список файлов в имени или пути которых есть пробелы, что вызывает проблему дальнейшей обработки
Как проще закавычить этот полный путь с именем для всех результатьв поиска
для последующей обработки
-
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Закавычить find
Покажите код, как Вы пытаетесь обработать вывод find
если с помощью read то просто потом надо ковычить переменную (для read главное что бы в имени файлов не было переносов строк, а на пробелы он реагирует нормально)
если с помощью read то просто потом надо ковычить переменную (для read главное что бы в имени файлов не было переносов строк, а на пробелы он реагирует нормально)
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Закавычить find
George Shot писал(а): ↑01.05.2009 13:45Как проще закавычить этот полный путь с именем для всех результатьв поиска
для последующей обработки
лично я ту-же проблему решил не заковычиванием, а экранированием.
а команда редактирования потока называется sed. ей можно впрочем и заковычить(наверное).
-
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Закавычить find
Это одно и тоже! кавычки " и ' - спецсимволы экранирования как и символ \
Ей ей конечно можно добавить кавычки к началу и концу каждой строки, но это не принесет желаемого результата.
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
- Сообщения: 34
- ОС: All
-
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Закавычить find
надо так:
find /tmp/test -mtime -1 | while read j; do echo "$j" ; done
find /tmp/test -mtime -1 | while read j; do echo "$j" ; done
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
- Сообщения: 34
- ОС: All
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Закавычить find
ну мне же принесло.
такой командой sed:
Код: Выделить всё
s/[] ()[]/\\&/2g
двойка - потому что дальше будет
Код: Выделить всё
s/:/file/ep
которая поменяет : на file, и выполнит эту команду. вот что-бы пробел после file не экранировать.
-
- Сообщения: 283
- ОС: Debian
Re: Закавычить find
remote system type is unix
-
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Закавычить find
Можно, но только осторожно.
Не понятно как это может повлиять на аргументы других команд.
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
- Сообщения: 229
- ОС: Debian
Re: Закавычить find
Код: Выделить всё
$ touch "ddd eee"
$ touch $'fff\nggg'
$ find ./ -mtime -1 | while read j; do echo "$j"; done
./
./ddd eee
./fff
ggg
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
-
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Закавычить find
Это всем известно. Читай выше.
Предложите свой вариант.
PS Если набор действий над результатом поиска небольшой, то наверно проще всего использовать ключ -exec
find /tmp/test -mtime -1 -exec echo {} \;
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
- Сообщения: 355
- ОС: Gentoo
Re: Закавычить find
А зачем закавычивать? У меня в zsh всё и так нормально:
Если строки, выводимые ls не будут начинаться с пробельного символа, то указание
«IFS='\n'» не нужно:
Кстати, всё ваши примеры с read сломаются, если в имени файла будет обратная
косая черта.
Добавлено: Заметил, что мой пример ломается, если в имени файла
присутствует и «\n», и «\\n». На bash можно сделать то же самое, если вместо
«$i» писать «"$i"».
PS: alias la='ls -hlA'
PPS: Подумал, какая польза от такой замечательной zsh, если я не могу
придумать способа передать из find имя файла, который я не смог бы сломать.
Разве что попробовать использавать «-printf %D:%i» и обрабатывать номер
устройства и inode, а не имя файла.
zyx@zyx-desktop
(zyx:~/tmp) % ls -1 *\ *
{[]} ()!&|
{\[]} ()!&|
test .
test2 .
test3 .
(zyx:~/tmp) % ls -1 *\ * | while IFS='\n' read -r i ; do la $i ; done
-rw-r--r-- 1 zyx 0 Май 3 13:41 {[]} ()!&|
-rw-r--r-- 1 zyx 0 Май 3 13:38 {\[]} ()!&|
-rw-r--r-- 1 zyx 0 Май 3 13:35 test .
-rw-r--r-- 1 zyx 0 Май 3 13:35 test2 .
-rw-r--r-- 1 zyx 0 Май 3 13:35 test3 .
Если строки, выводимые ls не будут начинаться с пробельного символа, то указание
«IFS='\n'» не нужно:
zyx@zyx-desktop
(zyx:~/tmp) % ls -1 ./*\ * | while read -r i ; do la $i ; done
-rw-r--r-- 1 zyx 0 Май 3 13:41 ./ {[]} ()!&|
-rw-r--r-- 1 zyx 0 Май 3 13:38 ./{\[]} ()!&|
-rw-r--r-- 1 zyx 0 Май 3 13:35 ./test .
-rw-r--r-- 1 zyx 0 Май 3 13:35 ./test2 .
-rw-r--r-- 1 zyx 0 Май 3 13:35 ./test3 .
Кстати, всё ваши примеры с read сломаются, если в имени файла будет обратная
косая черта.
Добавлено: Заметил, что мой пример ломается, если в имени файла
присутствует и «\n», и «\\n». На bash можно сделать то же самое, если вместо
«$i» писать «"$i"».
PS: alias la='ls -hlA'
PPS: Подумал, какая польза от такой замечательной zsh, если я не могу
придумать способа передать из find имя файла, который я не смог бы сломать.
Разве что попробовать использавать «-printf %D:%i» и обрабатывать номер
устройства и inode, а не имя файла.
-
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Закавычить find
ZyX, привет. Обрати внимание на то, что у автора темы не работал пример с for
for j in `find .. ` ............
ну или в твоем случает
for j in `ls ..` ....
Как себя поведет zsh ?
for j in `find .. ` ............
ну или в твоем случает
for j in `ls ..` ....
Как себя поведет zsh ?
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED