为什么带有通配符的sudo mv操作不起作用?


8

我认为必须对此有一个简单的答案,但我不知道为什么这不起作用!

我的主目录中有一个文件夹(好几个级别),称为安装插件。我想将该文件夹的所有内容(大约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

2
jira-plugins文件夹位于/home/,还是位于:/home/USER/
clk 2016年

那里真的有文件吗?您是否关闭了通气功能?
杰夫·谢勒

文件肯定在那里
esther h

2
编辑您的问题,然后发布的输出ls /home/jira-plugins/installed-plugins/
terdon

1
您仍然没有回复terdon的信息请求。请这样做。
迈克尔·汉普顿

Answers:


17

几乎可以肯定的是,由于您的普通用户帐户无法访问目录,因此Shell无法枚举与通配符匹配的文件。

您可以使用以下命令轻松地确认这一点

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. 成为root用户,然后移动文件

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

完美,+ 1可以解释命令的处理顺序。

10

sudo ls列出文件夹时,我假设普通用户无法读取路径中的一个或多个目录。那可以解释这种行为。此处的主要误解是何时完成的全局扩展*。它是在调用任何命令之前由外壳程序完成的。如果外壳程序没有足够的权限,则无法扩展它。

在这种情况下,更详细的情况是:

  1. 您的外壳程序尝试扩展命令行。由于您无权以/home/jira-plugins/installed-plugins自己的身份阅读,因此将无法扩展全局模式/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/*,但该文件不存在,因此出现错误消息。

谢谢,完全有道理。我接受了另一个答案,因为它是第一位的,还准确地告诉我该怎么做。
esther h
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.