crashc писал(а): ↑27.12.2007 06:42
Хотя знаете
Создает именно с пробелом, все тип топ... Тут имхо серьезней проблема...
И возможно баг при передаче параметров, в общем узкое место... Или я не догоню пока

OK. Идем по тому что ты написал, если намек не понятен:
Код: Выделить всё
FIND_PATH='/home/cc/from ff/'
REGEX_NAME="*.sh"
for FLS in find $FIND_PATH -type -f -name "*.sh" #$REGEX_NAME
do
ARR_FILES=($FLS)
done
как я сказал выше:
Код: Выделить всё
diesel@beezir:~$ for FLS in find $FIND_PATH -type -f -name "*.sh";do echo $FLS; done
find
/home/cc/from
ff/
-type
-f
-name
*.sh
т.е. пока что стоит проблема "результаты команды не передаются в for, передается сама команда". Чтобы передавались результаты команды, нужно или взять команду в обратные кавычки, либо в конструкцию типа $(команда), на этом этапе ты можешь увидеть ошибку:
Код: Выделить всё
diesel@debian:~$ for FLS in $(find $FIND_PATH -type -f -name "*.sh");do echo $FLS; done
find: invalid argument `-f' to `-type'
(в Solaris я сообщения об ошибке не увидел, но и команда как надо не отработала):
Код: Выделить всё
diesel@debian:~$ for FLS in $(find $FIND_PATH -type f -name "*.sh");do echo $FLS; done
делаем правильно.
Вот теперь мы приходим к ошибке:
Код: Выделить всё
diesel@debian:~$ FIND_PATH="/home/diesel/dir with space"; for FLS in $(find $FIND_PATH -type f); do echo $FLS; done
find: /home/diesel/dir: No such file or directory
find: with: No such file or directory
find: space: No such file or directory
вот это уже про пробелы, берем в двойные кавычки $FIND_PATH:
Код: Выделить всё
diesel@debian:~$ FIND_PATH="/home/diesel/dir with space"; for FLS in $(find "$FIND_PATH" -type f); do echo $FLS; done
/home/diesel/dir
with
space/file
/home/diesel/dir
with
space/file
with
space
Вобщем-то работает, но не совсем так как хотелось, for считает разделителями любые разделители в т.ч. и пробелы которые у нас есть в названии директории и названиях файлов. Тут есть несколько вариантов,
1. Я пользуюсь другой конуструкцией:
Код: Выделить всё
diesel@debian:~$ FIND_PATH="/home/diesel/dir with space"; find "$FIND_PATH" -type f|while read i; do echo $i; done
/home/diesel/dir with space/file
/home/diesel/dir with space/file with space
2. В шелле можно так же выставить переменную которая определяет используемые разделители:
Код: Выделить всё
diesel@debian:~$ IFS="
"; FIND_PATH="/home/diesel/dir with space"; FPS="\n"; for FLS in $(find "$FIND_PATH" -type f); do echo $FLS; done
/home/diesel/dir with space/file
/home/diesel/dir with space/file with space
diesel@debian:~$ IFS="
"; FIND_PATH="/home/diesel/dir with space"; FPS="\n"; for FLS in $(find "$FIND_PATH" -type f); do echo $FLS; done
/home/diesel/dir with space/file
/home/diesel/dir with space/file with space