LinuxForum.Fans
Тема

Обработка пробелов в именах файлов

Автор: Cruiser78 29 сообщений 9103 просмотров
#316247

"Cruiser78⇓" написал:
Голимый пробел (0х20) и никакого намёка на 0x0A. Или echo заменяет LF на пробел?
Именно. Вот смотрите:
text

$ TST="1
2
3"

$ echo -n $TST | hexdump -C 00000000 31 20 32 20 33 |1 2 3| 00000005

Шестнадцатеричное \x20 -- это десятичное 32 или пробел.

#316253

bormant написал:
[quote="Cruiser78⇓"]Голимый пробел (0х20) и никакого намёка на 0x0A. Или echo заменяет LF на пробел?
Именно. Вот смотрите:
text

$ TST="1
2
3"

$ echo -n $TST | hexdump -C 00000000 31 20 32 20 33 |1 2 3| 00000005

Шестнадцатеричное \x20 -- это десятичное 32 или пробел.[/quote]

Блин... Ну никогда бы не догадался. :) То есть не догадался бы об такой замене. А то, что пробел есть 0x20 - про то я лет двадцать, если не больше, знаю.

#316258

... но стоит добавить кавычки, и

text
$ echo -n "$TST" | hexdump -C
00000000  31 0a 32 0a 33                                    |1.2.3|
00000005

Разница в том, что в первом случае (без кавычек) echo получает 3 параметра, разделённых \x0a, которые затем выводит через пробел.
А во втором, с кавычками, echo получает только один параметр и таким, как он есть, с \x0a внутри.

То есть, если быть точным, замену делает не собственно echo, замена происходит при передаче параметров.

#316507

Посмотрел скрипты так же поддерживает spacefm, вызов скрипта настраивается в ручную через пункт меню инструменты. В качестве команды можно прописать путь к скрипту.
Так же можно настроить комбинацию клавиш вызова скрипта.
У меня код с этим же функционалом получился такой:

text
#!/bin/sh

$fm_import DELAY=1 feh --title "Slideshow" -rFx -S name -D $DELAY "${fm_files[@]}"

#316514

Упс пересмотрел, если попадаются файлы с расширением которое не поддерживает feh, то spacefm выдает сообщение об ошибке, так как его же выдает feh, пришлось поправить.
Что бы скрипт не выдавал таких сообщений.

text
#!/bin/sh

$fm_import start(){ DELAY=1 feh --title "Slideshow" -rFx -S name -D $DELAY "${fm_files[@]}" }

start 2>/dev/null

#317459

Хм ну а как на счет того если файл в имени содержит символ перехода \x0a? c IFS такой вариант уже не пройдет
Зы: вопрос не столько к файловым менеджерам, а вообщем например обработка вывода ls

#317552
"ormorph⇓" написал:
Хм ну а как на счет того если файл в имени содержит символ перехода \x0a? c IFS такой вариант уже не пройдет

тогда остаётся только найти и оборвать руки тому, кто такой файл создал... другого выхода нет...

#317586
"Fat-Zer⇓" написал:
тогда остаётся только найти и оборвать руки тому, кто такой файл создал... другого выхода нет...

Думаю что все таки есть выход, вроде нашел зацепку, чуть по позже если получится, выложу решение, правда код на bash похоже будет уже не такой короткий.

#317612

А не, универсального способа нет, с ls вообще не возможно создать нормальный список, возможно только используя вместо ls команду find
Примерно так:

text
find . -maxdepth "1" -printf "'%P'\n"

А далее не составит труда создать массив элементов из данного списка.

Для Nautilus скрипт который нормально обрабатывает такие файлы будет выглядеть так:

text
#!/bin/sh
DELAY=1
feh --title "Slideshow" -rFx -S name -D $DELAY "$@"

Ну и соответственно в spacefm выше приведенный мною скрипт тоже будет работать с такими файлами.

Войдите или зарегистрируйтесь, чтобы ответить.