[bash] Обработать файлы с пробелами
От: Аноним  
Дата: 11.11.13 17:22
Оценка:
Требуется в bash-скрипте обработать все файлы по маске в заданной директории. Файлы имеют расширения .001, .002, .003 и тд, причем заранее их количество неизвестно. Известно базовое имя файла, до расширения. Проблема в том, что имя может содержать пробелы.
Пробовал такое:

for file in $DIR/$base.* ; do
  ...
done


Не работает: имя с пробелами разбивается на части. Двойные кавычки проблему не решают, поскольку перестает работать маска.
Хелп, плиз.
Re: [bash] Обработать файлы с пробелами
От: dilmah США  
Дата: 11.11.13 17:31
Оценка: +2
А>
А>for file in "$DIR/$base".* ; do
А>  ...
А>done
А>


кроме того в местах использования нужно квотить "$file"
Re: [bash] Обработать файлы с пробелами
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.11.13 20:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Требуется в bash-скрипте обработать все файлы по маске в заданной директории. Файлы имеют расширения .001, .002, .003 и тд, причем заранее их количество неизвестно. Известно базовое имя файла, до расширения. Проблема в том, что имя может содержать пробелы.

А>Пробовал такое:

А>for file in $DIR/$base.* ; do


for file in "$DIR/$base".*; do

мини-доказательство, что это работает:

$ touch '1x x'
$ echo *'x x'
1x x
$ echo *'x y'
*x y
$ MASK='x x'
$ echo *$MASK
1x x x
$ echo *"$MASK"
1x x


Учтите, что в стандартном sh, и в bash, если не установлены опции типа failglob или noglob, будет как в последних двух строках, если по маске вообще ничего нет; так что лучше установить noglob перед этим for.

А>Не работает: имя с пробелами разбивается на части. Двойные кавычки проблему не решают, поскольку перестает работать маска.


Полностью в двойные кавычки и не надо было заключать.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.