URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7391
[ Назад ]

Исходное сообщение
"перебор файлов в bash и использованиемспец символов в названиях"

Отправлено stasmus , 29-Май-08 15:20 
Как написать на bash цикл перебора всех файлов в директории. В директории содержаться файлы, в именах которых точно присутствуют спец. символы (пробел, <, > и пр. )

Содержание

Сообщения в этом обсуждении
"перебор файлов в bash и использованиемспец символов в назван..."
Отправлено phpcoder , 29-Май-08 15:22 
>Как написать на bash цикл перебора всех файлов в директории. В директории содержаться файлы, в именах которых точно присутствуют спец. символы (пробел, <, > и пр. )

find DIR -type f | while read FILENAME; do
# здесь что-то с файлами делаем
echo "$FILENAME"
done


"перебор файлов в bash и использованиемспец символов в назван..."
Отправлено stasmus , 29-Май-08 16:12 
>>Как написать на bash цикл перебора всех файлов в директории. В директории содержаться файлы, в именах которых точно присутствуют спец. символы (пробел, <, > и пр. )
>
>find DIR -type f | while read FILENAME; do
># здесь что-то с файлами делаем
>echo "$FILENAME"
>done

Ага, спасибо, я пытался реализовать это так

for FILENAME in `find . -type f`
do
# здесь что-то с файлами делаем
cat "$FILENAME"
done

объясните пож-сто, почему не работает с for?


"перебор файлов в bash и использованиемспец символов в назван..."
Отправлено phpcoder , 29-Май-08 16:17 
>for FILENAME in `find . -type f`
>do
># здесь что-то с файлами делаем
>cat "$FILENAME"
>done
>
>объясните пож-сто, почему не работает с for?

Не знаю, у меня и с for работает :-)


"перебор файлов в bash и использованиемспец символов в назван..."
Отправлено madskull , 29-Май-08 16:33 
>Ага, спасибо, я пытался реализовать это так
>
>for FILENAME in `find . -type f`
>do
># здесь что-то с файлами делаем
>cat "$FILENAME"
>done
>
>объясните пож-сто, почему не работает с for?

потому что `find . -type f` "разворачивается"  в список, разделенный пробелами. следовательно, и имена файлов рзбиваются на части имеющимися пробелами.

кстати, должно работать


for FILENAME in *; do

и

find . -type f | while read FILENAME; do

причем вместо find можно и ls использовать

"про (не)экранирование"
Отправлено Andrey Mitrofanov , 29-Май-08 16:34 
>>>Как написать на bash цикл перебора всех файлов в директории. В директории содержаться файлы, в именах которых точно присутствуют спец. символы (пробел, <, > и пр. )
>Ага, спасибо, я пытался реализовать это так
>
>for FILENAME in `find . -type f`
>do
>
>объясните пож-сто, почему не работает с for?

Потому что после подстановки результата команды из `...` он, результат, интерпретируется шелом: имена с пробелами "разваливаются" на части, а с < > пытаютсся стать перенаправлениями из/в файл...


"про (не)экранирование"
Отправлено stasmus , 29-Май-08 16:45 
>
>Потому что после подстановки результата команды из `...` он, результат, интерпретируется шелом: имена с пробелами "разваливаются" на части, а с < > пытаютсся стать перенаправлениями из/в файл...

А как вообще интерпретирует шел подобные ситуации (не обязательно например выборка по файлам, возможно некая последовательность awk grep... )?



"про (не)экранирование"
Отправлено newser , 29-Май-08 18:09 
>>
>>Потому что после подстановки результата команды из `...` он, результат, интерпретируется шелом: имена с пробелами "разваливаются" на части, а с < > пытаютсся стать перенаправлениями из/в файл...
>
>А как вообще интерпретирует шел подобные ситуации (не обязательно например выборка по
>файлам, возможно некая последовательность awk grep... )?

Об этом и многом другом, как ни странно, подробно написано в man bash. :)