Почему эта операция sudo mv не работает с подстановочными знаками?

8

Я думаю, что должен быть простой ответ на это, но я не могу понять, почему это не работает!

У меня есть папка в моем домашнем каталоге (ну, несколько уровней ниже), называемая установленными плагинами. Я хочу перенести все содержимое этой папки (около 15 файлов .jar) в другие папки, также называемые установленными плагинами.

Вот что я пытаюсь:

$ sudo mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/                                                                                                                             
mv: cannot stat `/home/jira-plugins/installed-plugins/*': No such file or directory

В чем моя ошибка?

Папка точно не пустая. Вот lsвывод:

$ sudo ls /home/jira-plugins/installed-plugins
analytics-client-3.15.jar                                  plugin.2223138796603023855.jira-importers-plugin-6.0.30.jar
atlassian-chaperone-2.0.3.jar                              plugin.330169947367430109.jira-fisheye-plugin-6.2.8.jar
atlassian-client-resource-1.0.jar                          plugin.4363048306537053933.jeditor-2.1.7.2.jar
atlassian-pocketknife-api-commons-plugin-0.19.jar          plugin.4438307615842123002.jira-ical-feed-1.0.4.jar
atlassian-pretty-urls-plugin-1.8.jar                       plugin.461510159947098121.jira-issue-collector-plugin-1.2.5.jar
base-hipchat-integration-plugin-7.8.24.jar                 plugin.5630909028354276764.atlassian-universal-plugin-manager-plugin-2.7.8.jar
base-hipchat-integration-plugin-api-7.8.24.jar             plugin.6920509095052318016.atlassian-bonfire-plugin-2.9.13.jar
hipchat-core-plugin-0.8.3.jar                              plugin.6952408596192442765.atlassian-bonfire-plugin-2.8.2.jar
hipchat-for-jira-plugin-1.2.11.jar                         plugin.7079751365359230322.jira-importers-bitbucket-plugin-1.0.8.jar
jira-email-processor-plugin-1.0.29.jar                     plugin.7451827330686083284.atlassian-universal-plugin-manager-plugin-2.21.4.jar
jira-fisheye-plugin-7.1.1.jar                              plugin.7498175247667964103.jira-importers-redmine-plugin-2.0.7.jar
jira-ical-feed-1.1.jar                                     plugin.7803627457720701011.jira-importers-plugin-3.5.3.jar
jira-issue-nav-components-6.2.23.jar                       plugin.7977988994984147602.jira-bamboo-plugin-5.1.6.jar
jira-servicedesk-2.3.6.jar                                 plugin.8372419067824134899.jira-importers-plugin-5.0.2.jar
jira-workinghours-plugin-1.5.5.jar                         plugin.9081077311844509190.jira-fisheye-plugin-5.0.13.jar
plugin.1260160651631713368.stp-3.0.11.jar                  plugin.9128973321151732551.jira-fisheye-plugin-6.3.10.jar
plugin.2076016305412409108.jira-fisheye-plugin-3.4.10.jar  plugin-license-storage-plugin-2.8.jar
plugin.218965759549051904.jira-importers-plugin-6.1.5.jar  querydsl-4.0.7-provider-plugin-1.1.jar
plugin.2211202876682184330.jira-ical-feed-1.0.12.jar       stp-3.5.10.jar
Эстер Х
источник
2
Является ли JIRA-плагины папки в /home/, или это в: /home/USER/?
clk
Там на самом деле есть файлы? Вы выключили скуку?
Джефф Шаллер
файлы, безусловно, там
Эстер ч
2
Пожалуйста, отредактируйте свой вопрос и опубликуйте вывод ls /home/jira-plugins/installed-plugins/.
Тердон
1
Вы все еще не ответили на запрос Тердона о предоставлении информации. Пожалуйста, сделай так.
Майкл Хэмптон

Ответы:

17

Это почти наверняка связано с тем, что ваша обычная учетная запись пользователя не может получить доступ к каталогу, поэтому оболочка не может перечислить файлы, которые будут соответствовать шаблону.

Вы можете достаточно легко это подтвердить с помощью такой команды

ls /home/jira-plugins/installed-plugins

Если вы получите отказ в разрешении, то оболочка не сможет развернуть *подстановочный знак в этом каталоге.

Почему? Рассмотрим вашу команду

sudo mv / home / jira-plugins / установленные плагины / * / var / atlassian / данные приложений / jira / плагины / установленные плагины /

Порядок обработки заключается в (1) расширении подстановочных знаков, (2) выполнении команды, которая в этом случае имеет sudoнекоторые аргументы, которые соответствуют mvутверждению.

Вы можете решить проблему одним из двух способов

  1. Стать пользователем root и затем перемещать файлы

    sudo -s
    mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/                    
  2. Разверните шаблон после запуска sudo

    sudo bash -c "mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/"
roaima
источник
Отлично, +1 для объяснения порядка обработки для команды.
Они
10

Как вы делаете, sudo lsчтобы перечислить папку, я предполагаю, что один или несколько каталогов в пути не могут быть прочитаны обычными пользователями. Это объясняет поведение. Ключевое недоразумение здесь, когда глобальное расширение *сделано. Это делается оболочкой перед вызовом любой команды. Если у оболочки недостаточно прав, она не может ее развернуть.

Что происходит в этом случае более подробно:

  1. Ваша оболочка пытается расширить командную строку. Поскольку у вас нет права читать /home/jira-plugins/installed-pluginsкак вы сами, он не сможет расширить шаблон глобуса /home/jira-plugins/installed-plugins/*. Это оставит это неизменным. После этого этапа *уже не особенный.
  2. Ваша оболочка вызывает команду sudoс аргументами mv /home/jira-plugins/installed-plugins/*и/var/atlassian/application-data/jira/plugins/installed-plugins/
  3. sudoвызывает mvс аргументами /home/jira-plugins/installed-plugins/*, и/var/atlassian/application-data/jira/plugins/installed-plugins/
  4. mvпытается переместить файл, который на самом деле назван /home/jira-plugins/installed-plugins/*, но он не существует и, следовательно, сообщение об ошибке.
Йоран Уддеборг
источник
спасибо, имеет смысл. Я принял другой ответ, потому что он пришел первым, и также сказал мне, что с этим делать.
Эстер Ч