Perché questa operazione sudo mv con jolly non funziona?


8

Penso che ci debba essere una risposta semplice a questo, ma non riesco a capire perché questo non funziona!

Ho una cartella nella mia directory home (beh, alcuni livelli più in basso) chiamata plug-in installati. Voglio trasferire tutto il contenuto di quella cartella (circa 15 file .jar) in cartelle diverse, chiamate anche plugin installati.

Questo è quello che sto provando:

$ 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 è il mio errore?

La cartella non è sicuramente vuota. Ecco l' lsoutput:

$ 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
È il JIRA-plugins cartella in /home/, o è in: /home/USER/?
clk,

Ci sono davvero dei file lì? Hai spento il globbing?
Jeff Schaller

i file sono sicuramente lì
est h

2
Si prega di modificare la tua domanda e inviare l'output di ls /home/jira-plugins/installed-plugins/.
terdon

1
Non hai ancora risposto alla richiesta di informazioni di terdon. Per favore fallo.
Michael Hampton,

Risposte:


17

È quasi certamente dovuto al fatto che il tuo account utente ordinario non può accedere alla directory, quindi la shell non può enumerare i file che corrispondono al carattere jolly.

Puoi confermarlo abbastanza facilmente con un comando come questo

ls /home/jira-plugins/installed-plugins

Se viene negata un'autorizzazione, la shell non sarà in grado di espandere un *carattere jolly in quella directory.

Perché? Considera il tuo comando

sudo mv / home / plugin jira / plugin installati / * / var / atlassian / application-data / jira / plugin / plugin installati /

L'ordine di elaborazione è (1) espandere i caratteri jolly, (2) eseguire il comando, che in questo caso è sudocon alcuni argomenti che corrispondono a mvun'istruzione.

È possibile risolvere il problema in due modi

  1. Diventa root e quindi sposta i file

    sudo -s
    mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/                    
  2. Espandi il carattere jolly dopo l'esecuzione sudo

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

Perfetto, +1 per spiegare l'ordine di elaborazione del comando.
Theyna il

10

Mentre lo fai sudo lsper elencare la cartella, presumo che una o più directory nel percorso siano illeggibili dagli utenti normali. Ciò spiegherebbe il comportamento. Il principale fraintendimento qui è quando l'espansione globale di ciò *è fatta. Viene eseguito dalla shell, prima di invocare qualsiasi comando. Se la shell non dispone di autorizzazioni sufficienti, non può espanderla.

Ciò che accade in questo caso in modo più dettagliato è:

  1. La tua shell tenta di espandere la riga di comando. Dal momento che non hai il diritto di leggere /home/jira-plugins/installed-pluginscome te stesso, non sarà in grado di espandere il modello glob /home/jira-plugins/installed-plugins/*. Lo lascerà non modificato. Dopo questa fase, *non è più speciale.
  2. La tua shell invoca il comando sudocon gli argomenti mv /home/jira-plugins/installed-plugins/*e/var/atlassian/application-data/jira/plugins/installed-plugins/
  3. sudoinvoca mvcon gli argomenti /home/jira-plugins/installed-plugins/*e/var/atlassian/application-data/jira/plugins/installed-plugins/
  4. mvtenta di spostare un file effettivamente denominato /home/jira-plugins/installed-plugins/*, ma non esiste e quindi il messaggio di errore.

grazie, ha perfettamente senso. Ho accettato l'altra risposta perché è arrivata prima, e mi ha anche detto esattamente cosa fare al riguardo.
est h
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.