Tại sao hoạt động sudo mv này với ký tự đại diện hoạt động?


8

Tôi nghĩ rằng phải có câu trả lời đơn giản cho vấn đề này, nhưng tôi không thể hiểu tại sao điều này không hiệu quả!

Tôi có một thư mục trong thư mục nhà của tôi (tốt, giảm một vài cấp) được gọi là plugin đã cài đặt. Tôi muốn chuyển tất cả nội dung của thư mục đó (khoảng 15 tệp .jar) sang một thư mục khác, còn được gọi là plugin đã cài đặt.

Đây là những gì tôi đang cố gắng:

$ 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

Lỗi của tôi là gì

Thư mục chắc chắn không trống. Đây là lsđầu ra:

$ 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
Là thư mục jira-plugins /home/, hoặc là trong : /home/USER/?
clk

Có thực sự có tập tin ở đó? Bạn đã tắt Globing?
Jeff Schaller

các tập tin chắc chắn là có
esther h

2
Vui lòng chỉnh sửa câu hỏi của bạn và gửi đầu ra của ls /home/jira-plugins/installed-plugins/.
terdon

1
Bạn vẫn chưa trả lời yêu cầu thông tin của terdon. Xin hãy làm như vậy.
Michael Hampton

Câu trả lời:


17

Gần như chắc chắn là do tài khoản người dùng thông thường của bạn không thể truy cập vào thư mục, vì vậy trình bao không thể liệt kê các tệp phù hợp với ký tự đại diện.

Bạn có thể xác nhận điều này đủ dễ dàng với một lệnh như thế này

ls /home/jira-plugins/installed-plugins

Nếu bạn bị từ chối cấp phép thì không có cách nào shell sẽ có thể mở rộng *ký tự đại diện trong thư mục đó.

Tại sao? Hãy xem xét lệnh của bạn

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

Thứ tự xử lý là (1) mở rộng các ký tự đại diện, (2) thực thi lệnh, trong trường hợp này là sudovới một số đối số xảy ra tương ứng với một mvcâu lệnh.

Bạn có thể giải quyết vấn đề theo một trong hai cách

  1. Trở thành root và sau đó di chuyển các tập tin

    sudo -s
    mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/                    
    
  2. Mở rộng ký tự đại diện sau khi chạy sudo

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

Hoàn hảo, +1 để giải thích thứ tự xử lý cho lệnh.
Họ

10

Như bạn làm sudo lsđể liệt kê thư mục, tôi giả sử một hoặc nhiều thư mục trong đường dẫn không thể đọc được bởi người dùng thông thường. Điều đó sẽ giải thích hành vi. Sự hiểu lầm chính ở đây là khi việc mở rộng toàn cầu *được thực hiện. Nó được thực hiện bởi shell, trước khi gọi bất kỳ lệnh nào. Nếu shell không có đủ quyền, nó không thể mở rộng nó.

Điều gì xảy ra trong trường hợp này chi tiết hơn là:

  1. Shell của bạn cố gắng mở rộng dòng lệnh. Vì bạn không có quyền đọc /home/jira-plugins/installed-pluginsnhư chính mình, nó sẽ không thể mở rộng mô hình toàn cầu /home/jira-plugins/installed-plugins/*. Nó sẽ để nó không thay đổi. Sau giai đoạn này, *không còn đặc biệt.
  2. Shell của bạn gọi lệnh sudovới các đối số mv /home/jira-plugins/installed-plugins/*/var/atlassian/application-data/jira/plugins/installed-plugins/
  3. sudoviện dẫn mvvới các đối số /home/jira-plugins/installed-plugins/*, và/var/atlassian/application-data/jira/plugins/installed-plugins/
  4. mvcố gắng di chuyển một tập tin thực sự được đặt tên /home/jira-plugins/installed-plugins/*, nhưng nó không tồn tại và do đó thông báo lỗi.

cảm ơn, làm cho ý nghĩa hoàn hảo. Tôi chấp nhận câu trả lời khác bởi vì nó đến trước, và cũng cho tôi biết chính xác phải làm gì về nó.
esther h
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.