LINUX.ORG.RU

bash. Кусок скрипта. Содержание каталога

 


0

1

Никому не трудно подсказать как в bash сделать, чтобы в одну переменную присвоилось содержание некоего каталога, исключая файлы начинающиеся с точки и кончающиеся тильдой, а в другую переменную поочередно имена файлов из этого каталога?

★★★★★
var1=[!\.]*[!\~]

Для второго просто разбирай эту переменную как массив.

Не гарантирую что пробелы в именах будут корректно восприняты.

alozovskoy ★★★★★
()

переменную присвоилось содержание некоего каталога, исключая файлы начинающиеся с точки и кончающиеся тильдой

Если понадежнее (внутри имен могут быть \n), то:

var=()
while read -r -d $'\0' tmp
do
  var+=("$tmp")
done < <(find -maxdepth 1 -type f ! -name '.*~' -print0)

Если попроще: readarray -t var < <(find -maxdepth 1 -type f ! -name '.*~')

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

имена .. исключая файлы начинающиеся

а блин, нужно type f внутрь: ... ! \( -type f -name '.*~' \).

anonymous
()
Ответ на: комментарий от alozovskoy

Во-первых, нужно тогда nullglob; во-вторых [!.]*~ .*[!~] (начинающиеся с точки и кончающиеся), пора бы правила де Моргана знать.

anonymous
()
Ответ на: комментарий от Eddy_Em

Вообще-то год назад окончил, просто забыл инфу о себе в профиле обновить.

sunny1983 ★★★★★
() автор топика

Э... Простите за тупняк, а в какой главе «Advanced Bash-Scripting Guide» оператор «восклицательный знак описывается»? А то бы я если бы не спросил, стал бы костылить обработку вывода ls.

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

Это посиксовый «глоббинг» (google: open group posix shell glob, где-то рядом), баш дополнительно умеет [^...]

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