¿Por qué esta operación sudo mv con comodín no funciona?

8

¡Creo que debe haber una respuesta simple a esto, pero no puedo entender por qué esto no está funcionando!

Tengo una carpeta en mi directorio de inicio (bueno, algunos niveles más bajos) llamada plugins instalados. Quiero transferir todo el contenido de esa carpeta (aproximadamente 15 archivos .jar) a carpetas diferentes, también llamadas complementos instalados.

Esto es lo que estoy intentando:

$ 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

Cual es mi error?

La carpeta definitivamente no está vacía. Aquí está la lssalida:

$ 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
fuente
2
¿Está la carpeta jira-plugins en /home/, o está en /home/USER/:?
clk
¿Hay realmente archivos allí? ¿Desactivó el globbing?
Jeff Schaller
los archivos definitivamente están ahí
esther h
2
Por favor, editar su pregunta y después de la salida de ls /home/jira-plugins/installed-plugins/.
terdon
1
Aún no ha respondido a la solicitud de información de terdon. Por favor, hazlo.
Michael Hampton

Respuestas:

17

Es casi seguro que su cuenta de usuario común no puede acceder al directorio, por lo que el shell no puede enumerar los archivos que coincidirían con el comodín.

Puede confirmar esto fácilmente con un comando como este

ls /home/jira-plugins/installed-plugins

Si obtiene un permiso denegado, no hay forma de que el shell pueda expandir un *comodín en ese directorio.

¿Por qué? Considera tu orden

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

El orden de procesamiento es (1) expandir los comodines, (2) ejecutar el comando, que en este caso es sudocon algunos argumentos que corresponden a una mvdeclaración.

Puede resolver el problema de dos maneras.

  1. Conviértete en root y luego mueve los archivos

    sudo -s
    mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/                    
  2. Expanda el comodín después de ejecutar sudo

    sudo bash -c "mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/"
roaima
fuente
Perfecto, +1 para explicar el orden de procesamiento del comando.
Theyna
10

Al hacer sudo lsuna lista de la carpeta, supongo que uno o más directorios en la ruta son ilegibles para los usuarios normales. Eso explicaría el comportamiento. El malentendido clave aquí es cuando *se realiza la expansión global del . Lo realiza el shell, antes de invocar cualquier comando. Si el shell no tiene permisos suficientes, no puede expandirlo.

Lo que sucede en este caso con más detalle es:

  1. Su shell intenta expandir la línea de comando. Como no tiene derecho a leer /home/jira-plugins/installed-pluginscomo usted mismo, no podrá expandir el patrón global /home/jira-plugins/installed-plugins/*. Lo dejará sin modificar. Después de esta etapa, *ya no es especial.
  2. Su shell invoca el comando sudocon los argumentos mv /home/jira-plugins/installed-plugins/*, y/var/atlassian/application-data/jira/plugins/installed-plugins/
  3. sudoinvoca mvcon los argumentos /home/jira-plugins/installed-plugins/*, y/var/atlassian/application-data/jira/plugins/installed-plugins/
  4. mvintenta mover un archivo realmente nombrado /home/jira-plugins/installed-plugins/*, pero no existe y, por lo tanto, el mensaje de error.
Göran Uddeborg
fuente
Gracias, tiene mucho sentido. Acepté la otra respuesta porque vino primero, y también me dijo exactamente qué hacer al respecto.
esther h