Вместо ls */*/*/*/*.jpg
попробуйте:
echo */*/*/*/*.jpg | xargs ls
xargs
(1 )знает, какое максимальное количество аргументов есть в системе, и будет разбивать свой стандартный ввод, чтобы вызывать указанную строку команды -несколько раз с числом аргументов, не превышающим этот предел, каким бы он ни был (, вы также можете установить его ниже максимума ОС, используя опцию -n
).
Например, предположим, что ограничение составляет 3 аргумента и у вас есть пять файлов. В этом случае xargs
выполнит ls
дважды:
ls 1.jpg 2.jpg 3.jpg
ls 4.jpg 5.jpg
Часто это вполне подходит, но не всегда --например, вы не можете полагаться наls
(1)сортировку всех записей для вас должным образом, потому что каждый отдельныйls
-вызов будет сортировать только подмножество записей, переданных ему xargs
.
Несмотря на то, что вы можете увеличить ограничение, как было предложено другими, ограничение все равно будет --, и когда-нибудь ваша коллекция JPG -снова перерастет его. Вы должны подготовить свой скрипт (s )для работы с бесконечным числом...
После долгих головных болей я думаю, что у меня есть некоторые ответы. Каждый процесс действительно является частью ровно одного пользовательского пространства имен (, как подтверждается здесь ), изображение в статье точно отображает это. Помимо init, процессы создаются другими процессами. Когда процесс создает дочерний процесс, у него есть возможность назначить дочерний процесс в новое пользовательское пространство имен, которое также называется «дочерним пространством имен» пользовательского пространства имен родительского процесса.
Так называемые сопоставления UID (идентификатора пользователя )и GID (идентификатора группы)позволяют процессу UID и GID для кажутся разными при проверке из другого пространства имен. Сопоставления важны, потому что процесс может, например, изменять файлы в системе, которая обрабатывает из других пространств имен захотят получить доступ, и они также захотят увидеть осмысленный UID или GID на эти файлы из-за пределов пространства имен.
Сопоставление UID (то же самое для GID )работает, используя UID процесса, который создает новое пространство имен, сопоставление этого с /proc/<Process_ID>/uid_map
и назначение сопоставленного UID для нового процесса в новом пространстве имен. Если сопоставление не указано при создании нового пользовательского пространства имен, то UID процессов в новом пространстве имен примет значение /proc/sys/kernel/overflowuid
Более подробную информацию о том, как можно определить такие отображения, можно найти в этой статье LWN .