Pourquoi cette opération sudo mv avec caractère générique ne fonctionne-t-elle pas?

8

Je pense qu'il doit y avoir une réponse simple à cela, mais je ne peux pas comprendre pourquoi cela ne fonctionne pas!

J'ai un dossier dans mon répertoire personnel (enfin, quelques niveaux plus bas) appelé plugins installés. Je veux transférer tout le contenu de ce dossier (environ 15 fichiers .jar) vers des dossiers différents, également appelés plugins installés.

Voici ce que j'essaie:

$ 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

Quelle est mon erreur?

Le dossier n'est certainement pas vide. Voici la lssortie:

$ 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
la source
2
Est ce que le plugins JIRA-dossier dans /home/, ou est - il à: /home/USER/?
clk
Y a-t-il réellement des fichiers là-bas? Avez-vous désactivé le globbing?
Jeff Schaller
les fichiers sont définitivement là
esther h
2
Veuillez modifier votre question et publier la sortie de ls /home/jira-plugins/installed-plugins/.
terdon
1
Vous n'avez toujours pas répondu à la demande d'informations de terdon. S'il-vous-plaît faites ainsi.
Michael Hampton

Réponses:

17

C'est presque certainement dû au fait que votre compte d'utilisateur ordinaire ne peut pas accéder au répertoire, donc le shell ne peut pas énumérer les fichiers qui correspondraient au caractère générique.

Vous pouvez le confirmer assez facilement avec une commande comme celle-ci

ls /home/jira-plugins/installed-plugins

Si vous obtenez une autorisation refusée, il n'y a aucun moyen que le shell puisse développer un *caractère générique dans ce répertoire.

Pourquoi? Considérez votre commande

sudo mv / home / jira-plugins / installed-plugins / * / var / atlassian / application-data / jira / plugins / installed-plugins /

L'ordre de traitement est le suivant: (1) développer les caractères génériques, (2) exécuter la commande, qui dans ce cas est sudoaccompagnée de certains arguments qui correspondent à une mvinstruction.

Vous pouvez résoudre le problème de deux manières

  1. Devenez root puis déplacez les fichiers

    sudo -s
    mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/                    
    
  2. Développez le caractère générique après l'exécution sudo

    sudo bash -c "mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/"
roaima
la source
Parfait, +1 pour expliquer l'ordre de traitement de la commande.
Theyna
10

Comme vous le faites sudo lspour répertorier le dossier, je suppose qu'un ou plusieurs répertoires du chemin d'accès sont illisibles pour les utilisateurs réguliers. Cela expliquerait le comportement. Le principal malentendu ici est lorsque l'expansion globale de la *est terminée. Cela se fait par le shell, avant d'appeler une commande. Si le shell n'a pas suffisamment d'autorisations, il ne peut pas le développer.

Ce qui se passe dans ce cas plus en détail est:

  1. Votre shell essaie d'étendre la ligne de commande. Puisque vous n'avez pas le droit de lire en /home/jira-plugins/installed-pluginstant que vous-même, il ne pourra pas étendre le modèle de glob /home/jira-plugins/installed-plugins/*. Il ne le modifiera pas. Après cette étape, ce *n'est plus spécial.
  2. Votre shell invoque la commande sudoavec les arguments mv /home/jira-plugins/installed-plugins/*, et/var/atlassian/application-data/jira/plugins/installed-plugins/
  3. sudoinvoque mvavec les arguments /home/jira-plugins/installed-plugins/*, et/var/atlassian/application-data/jira/plugins/installed-plugins/
  4. mvessaie de déplacer un fichier nommé /home/jira-plugins/installed-plugins/*, mais il n'existe pas et donc le message d'erreur.
Göran Uddeborg
la source
merci, est parfaitement logique. J'ai accepté l'autre réponse parce qu'elle est venue en premier, et m'a aussi dit exactement quoi faire à ce sujet.
esther h