Вы неправильно понимаете chroot
несколько; это просто не скрывает материал, тот каталог на самом деле становится /
для сессии. Необходимо предоставить изображение довольно полной системы (/etc
, /bin
, /lib
, и т.д.) под ним, или ничто не будет работать (в частности, у пользователя не будет оболочки для выполнения). root
будучи должен владеть новым /
последствие этого: кто-либо еще владеющий корнем файловой системы был бы очевидной проблемой безопасности.
Удар расширил шарик +([^.])
будет соответствовать файлам ни с кем. на их имя. Это требует, чтобы Вы не сбрасывали shopt extglob
(на современных установках удара это должно быть установлено по умолчанию). Средства шаблона:
любое число (но по крайней мере один) символов кроме.
Можно поместить все имена файлов в массив:
NO_EXTENSION=( +([^.]) )
Можно распечатать имена файлов:
printf "%s\n" +([^.])
Или передайте их всех утилите:
ls -- +([^.])
Если Вы хотите их в переменной, но не массиве, необходимо быть очень уверены, что никакой файл не имеет пробел на свое имя. Если Вы абсолютно уверены в этом, можно сделать:
NO_EXTENSION=$(echo +([^.]))
Вызов эха необходим, чтобы заставить расширение пути происходить, в отличие от этого, в случае массива. Я настоятельно рекомендую использовать массивы для этого вида списка, потому что Вы не должны волноваться о специальных символах в именах файлов.
Можно получить список файлов без точки на их имена в рабочем каталоге с:
find . -maxdepth 1 ! -name "*.*"
У Вас могут также быть файлы, которые являются .file
под Unix, если Вы хотите соответствовать им и file
, но нет file.ext
затем можно использовать:
find . -maxdepth 1 ! -name "*.*" -o -name ".*[^.]*"
\( -name '.?*' ! -name '.*.*' \)
.
– Stéphane Chazelas
23.08.2013, 00:29
С extglob
опция, можно соответствовать дополнению шаблона, т.е. файлам, имя которых не соответствуют шаблону. Файлы с расширения являются теми то соответствие *.*
, таким образом, файлы без расширения в текущем каталоге могут быть подобраны этот путь:
shopt -s extglob
somecommand !(*.*)
Обратите внимание, что точечные файлы (файлы, имя которых начинается .
) не будет включен. Если Вы хотите соответствовать им также и рассматривать их как без расширения, если они не содержат секунду .
, можно использовать
shopt -s extglob nullglob
somecommand !(*.*) .!(*.*)
или
shopt -s dotglob extglob
somecommand !(?*.*)
Возможно, Вы ищете это:
$ ls | grep -v '\.'
Пример:
$ ls
alphabetsoup ieat.pie xinitrc
$ ls | grep -v '\.'
alphabetsoup
xinitrc
echo
.
– Stéphane Chazelas
23.08.2013, 00:31
files=*.[nothing]
. – pedram 21.08.2013, 19:54