와일드카드 문자를 사용한 sudo mv 작업이 작동하지 않는 이유는 무엇입니까?

와일드카드 문자를 사용한 sudo mv 작업이 작동하지 않는 이유는 무엇입니까?

이 질문에 대한 간단한 대답이 있어야 한다고 생각하는데 왜 이것이 작동하지 않는지 이해가 되지 않습니다!

내 홈 디렉터리에 "installed-plugins"라는 폴더가 있습니다(음, 몇 수준 아래). 이 폴더의 모든 콘텐츠(약 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

답변1

일반 사용자 계정에는 디렉토리에 대한 액세스 권한이 없기 때문에 쉘은 와일드카드와 일치하는 파일을 거의 확실히 열거할 수 없습니다.

다음과 같은 명령을 사용하면 쉽게 확인할 수 있습니다.

ls /home/jira-plugins/installed-plugins

권한이 거부되면 쉘은 *디렉토리에서 와일드카드 문자를 확장할 수 없습니다.

왜? 당신의 주문을 고려하십시오

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

처리 순서는 (1) 와일드카드 확장, (2) 명령 실행입니다. 이 경우 명령문 sudo과 정확히 일치하는 일부 매개변수를 사용합니다.mv

두 가지 방법 중 하나로 문제를 해결할 수 있습니다.

  1. 루트가 되어 파일을 이동하세요

     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/"
    

답변2

폴더를 나열할 때 sudo ls경로에 있는 하나 이상의 디렉터리를 일반 사용자가 읽을 수 없다고 가정합니다. 이것은 이러한 행동을 설명할 수 있습니다. 여기서 가장 큰 오해는 글로벌 확장이 *완료되는 시점입니다. 이는 명령이 호출되기 전에 쉘에 의해 수행됩니다. 셸에 충분한 권한이 없으면 확장할 수 없습니다.

이 경우에 대해 더 자세히 설명하면 다음과 같습니다.

  1. 쉘이 명령줄 확장을 시도합니다. 자신으로서 읽을 권한이 없으므로 /home/jira-plugins/installed-pluginsglob 패턴을 확장할 수 없습니다 /home/jira-plugins/installed-plugins/*. 변경되지 않은 상태로 유지됩니다. 이 단계 이후에는 *더 이상 특별하지 않습니다.
  2. 쉘은 sudo인수를 사용하여 명령을 호출합니다 mv /home/jira-plugins/installed-plugins/*./var/atlassian/application-data/jira/plugins/installed-plugins/
  3. sudomv매개변수를 사용하여 호출 /home/jira-plugins/installed-plugins/*되며/var/atlassian/application-data/jira/plugins/installed-plugins/
  4. mv실제로 이름이 지정된 파일을 이동하려고 시도했지만 /home/jira-plugins/installed-plugins/*존재하지 않으므로 오류 메시지가 나타납니다.

관련 정보