Por que essa operação sudo mv com curinga não está funcionando?

8

Acho que deve haver uma resposta simples para isso, mas não consigo entender por que isso não está funcionando!

Eu tenho uma pasta no meu diretório pessoal (bem, alguns níveis abaixo) chamada plug-ins instalados. Quero transferir todo o conteúdo dessa pasta (cerca de 15 arquivos .jar) para pastas diferentes, também chamadas de plug-ins instalados.

Isto é o que estou tentando:

$ 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

Qual é o meu erro?

A pasta definitivamente não está vazia. Aqui está a lssaída:

$ 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
esther h
fonte
2
A pasta jira-plugins está dentro /home/ou está em /home/USER/:?
clk
Na verdade, existem arquivos lá? Você desligou o globbing?
Jeff Schaller
os arquivos estão definitivamente lá
esther h
2
Por favor edite sua pergunta e postar a saída ls /home/jira-plugins/installed-plugins/.
terdon
1
Você ainda não respondeu à solicitação de informações de terdon. Por favor, faça isso.
Michael Hampton

Respostas:

17

É quase certamente devido ao fato de que sua conta de usuário comum não pode acessar o diretório, portanto, o shell não pode enumerar os arquivos que corresponderiam ao curinga.

Você pode confirmar isso facilmente com um comando como este

ls /home/jira-plugins/installed-plugins

Se você receber uma permissão negada, não há como o shell expandir um *curinga nesse diretório.

Por quê? Considere seu comando

sudo mv / home / jira-plugins / plug-ins instalados / * / var / atlassian / data-application / jira / plugins / plug-ins / instalados

A ordem de processamento é (1) expandir os caracteres curinga, (2) executar o comando, que neste caso está sudocom alguns argumentos que correspondem a uma mvinstrução.

Você pode resolver o problema de duas maneiras

  1. Torne-se root e mova os arquivos

    sudo -s
    mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/                    
  2. Expanda o curinga após a execução sudo

    sudo bash -c "mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/"
roaima
fonte
Perfeito, +1 para explicar a ordem de processamento do comando.
Theyna
10

Como você faz sudo lspara listar a pasta, presumo que um ou mais diretórios no caminho sejam ilegíveis por usuários regulares. Isso explicaria o comportamento. O principal mal-entendido aqui é quando a expansão global *é feita. Isso é feito pelo shell, antes de chamar qualquer comando. Se o shell não tiver permissões suficientes, não poderá expandi-lo.

O que acontece neste caso com mais detalhes é:

  1. Seu shell tenta expandir a linha de comando. Como você não tem o direito de ler /home/jira-plugins/installed-pluginscomo você, ele não poderá expandir o padrão glob /home/jira-plugins/installed-plugins/*. Isso deixará inalterado. Após esta etapa, *não é mais especial.
  2. Seu shell chama o comando sudocom os argumentos mv /home/jira-plugins/installed-plugins/*e/var/atlassian/application-data/jira/plugins/installed-plugins/
  3. sudoinvoca mvcom os argumentos /home/jira-plugins/installed-plugins/*e/var/atlassian/application-data/jira/plugins/installed-plugins/
  4. mvtenta mover um arquivo realmente nomeado /home/jira-plugins/installed-plugins/*, mas ele não existe e, portanto, a mensagem de erro.
Göran Uddeborg
fonte
obrigado, faz todo o sentido. Aceitei a outra resposta porque ela veio primeiro e também me disse exatamente o que fazer a respeito.
esther h