ワイルドカード文字を使用した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

2 つの方法のいずれかで問題を解決できます。

  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つ以上のディレクトリを一般ユーザーが読み取ることができないとします。これはこれらの行動を説明することができます。ここで最大の誤解は、グローバル拡張が*完了した時点です。これは、コマンドが呼び出される前にシェルによって実行されます。シェルに十分な権限がないと拡張できません。

この場合についてさらに詳しく説明すると、次のようになります。

  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/*存在しないため、エラーメッセージが表示されます。

関連情報