LINUX.ORG.RU

for в bash'е


0

0

Хочу обработать некое количество файлов беру банальную конструкцию

for f in `ls -A`; do #some commands using $f done;

Если в имени файла есть пробел, то такой файл нормально не обрабатывается. Как обработать файлы с пробелами в именах?

anonymous

Да, мне тоже интересно. Я примерно так извращаюсь:

for f in `ls -A | sed 's/ /\\\040/'` ; do #some commands using "`echo -e $f|sed s'/\\040/ /'`"; done

но как-то оно неуклюже...

Проблема в том, что баш понимает конструкцию типа
for f in one two with\ space etc
но почему-то когда строка 
one two with\ space etc 
прилетает из кавычек ``, башу плювать на ескейпы!

Die-Hard ★★★★★
()
Ответ на: комментарий от chip

2chip (*) (2002-08-22 11:39:32.846): Попробуй сам - НЕ РАБОТАЕТ! Почему - см. мой ответ.

Die-Hard ★★★★★
()
Ответ на: комментарий от chip

Вдогонку - у меня GNU bash, version 2.04.0(1)-release (i386-suse-linux)

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

У меня - НЕ РАБОТАЕТ:
for i in `ls -A`; do echo ono="$i"; done
Файл "a b" вышел как
...
ono=a
ono=b
...

Более интересный пример:
for i in `ls -Ab`; do echo ono=\""$i"\"; done
...
ono="a\"
ono="b"
...

Die-Hard ★★★★★
()

ээ... а нахуя ls?

for I in ./*.rar ; do ...

anonymous
()

Правильный IFS спасет отца русской демократии.

% IFS='
>'; for i in и т.д.

anonymous
()

Народ не ленитесь написать пару лишних байт в скрипте !!!!
filez=`ls -A`
for file in "$filez"; do
echo "$name"
done

joker
()

соррЫ вышла небольшая ошибочка в скрипте
filez=`ls -A`
for file in "$filez"; do
echo "$file"
done

joker
()

anonymous (*) (2002-08-23 02:43:24.275)
> for I in ./*.rar ; do 
Работает, но это - решение частной, хотя и наиболее часто встречающейся проблемы.

joker (*) (2002-08-23 12:11:33.365):
Ошибка.
Скрипт
filez=`ls -A`
for file in "$filez"; do  echo ono=\'"$file"\' ;done
Результат:
ono='01042813121504350.pdf
a b
.....
we1.ps'
Понятно?


anonymous (*) (2002-08-23 07:27:46.358):
> Правильный IFS спасет отца русской демократии.
Верное решение ;). У меня оно раньше не работало, и я только что понял, почему.

Было:
(IFS='
';for i in `ls -A`; do echo ono=\""$i"\"; done )
ls: invalid option --  
Try `ls --help' for more information.

Стало:
(IFS='
';for i in `/bin/ls -A`; do echo ono=\""$i"\"; done )
ono="01042813121504350.pdf"
ono="a b"
...
ono="we1.ps"

Причина:alias ls
alias ls='ls $LS_OPTIONS'

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