Почему не удается найти файлы списков в подкаталогах? [дубликат]

Нет, LXC, Docker и LXD не совсем одно и то же. Вкратце:

LXC

Контейнеры LinuX (LXC) - это метод виртуализации на уровне операционной системы для запуска нескольких изолированных систем (контейнеров) Linux на одном управляющем хосте (хосте LXC)

https: // wiki. archlinux.org/index.php / Linux_Containers

низкий уровень ...

https://linuxcontainers.org/

Docker

  • от Docker, Inc
  • контейнерная система, использующая контейнеры LXC
  • , чтобы вы могли : Сборка, доставка и запуск любого приложения, где угодно http://www.docker.com

LXD

Докер против LXD

  • Docker специализируется на развертывании приложений
  • LXD специализируется на развертывании (Linux) Виртуальные машины

Infographic of Docker vs LXD

Источник: http://linux.softpedia.com/blog/infographic-lxd-machine-containers-from-ubuntu-linux-492602.shtml

Первоначально: https: / /insights.ubuntu.com/2015/09/23/infographic-lxd-machine-containers-from-ubuntu/

Небольшая техническая заметка

5
06.02.2017, 03:00
2 ответа

Легко забыть, что подстановка оболочки по-прежнему играет роль в этом процессе. Таким образом, вам нужен способ сообщить оболочке, чтобы она не раскрывала * до списка файлов. Один из способов - это то, что упомянул Крис Джонсон - цитирование.

Другой - экранирование символа * , как в

find . -iname \*.js

Сравните:

$ strace -e trace=execve find -maxdept 1 -iname *.js > /dev/null                                      
execve("/usr/bin/find", ["find", "-maxdept", "1", "-iname", "file1.js", "file2.js"], [/* 75 vars */]) = 0
find: unknown predicate `-maxdept'
+++ exited with 1 +++

$ strace -e trace=execve find -maxdept 1 -iname \*.js > /dev/null                                     
execve("/usr/bin/find", ["find", "-maxdept", "1", "-iname", "*.js"], [/* 75 vars */]) = 0
find: unknown predicate `-maxdept'
+++ exited with 1 +++

В первом случае мы видим, что * был расширен до списка файлов file1 .js и file2.js , которые присутствуют в текущем рабочем каталоге. Во втором примере - * рассматривается как буквальный аргумент для find . Фактически, это тот же результат, полученный при цитировании аргумента:

$ strace -e trace=execve find -maxdept 1 -iname '*.js' > /dev/null                                    
execve("/usr/bin/find", ["find", "-maxdept", "1", "-iname", "*.js"], [/* 75 vars */]) = 0
find: unknown predicate `-maxdept'
+++ exited with 1 +++

В качестве альтернативы вы можете вместо этого использовать восьмеричное значение * .

$ strace -e trace=execve find -maxdept 1 -iname $'\52'.js > /dev/null                                 
execve("/usr/bin/find", ["find", "-maxdept", "1", "-iname", "*.js"], [/* 75 vars */]) = 0
find: unknown predicate `-maxdept'
+++ exited with 1 +++
2
27.01.2020, 20:34

Заключите *. Js в одинарные кавычки. Без кавычек оболочка расширяет подстановочный знак до имен файлов, которые соответствуют в текущем каталоге, поэтому find получает только эти имена файлов либо в текущем каталоге, либо в подкаталогах в спецификации find (но никогда не видит подстановочный знак ). Чтобы указать его в качестве шаблона для использования find , вам необходимо предотвратить расширение оболочки. '*. Js' делает это.

8
27.01.2020, 20:34

Теги

Похожие вопросы