est*_*r h 10 shell sudo wildcards 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
Run Code Online (Sandbox Code Playgroud)
我的错误是什么?
该文件夹绝对不是空的。这是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
Run Code Online (Sandbox Code Playgroud)
roa*_*ima 19
这几乎可以肯定是由于您的普通用户帐户无法访问该目录,因此 shell 无法枚举与通配符匹配的文件。
您可以使用这样的命令轻松确认这一点
ls /home/jira-plugins/installed-plugins
Run Code Online (Sandbox Code Playgroud)
如果您的权限被拒绝,则 shell 将无法*在该目录中扩展通配符。
为什么?考虑你的命令
Run Code Online (Sandbox Code Playgroud)sudo mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/
处理的顺序是 (1) 扩展通配符,(2) 执行命令,在这种情况下,它sudo带有一些恰好对应于mv语句的参数。
您可以通过以下两种方式之一解决问题
成为 root 然后移动文件
sudo -s
mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/
Run Code Online (Sandbox Code Playgroud)
运行后展开通配符 sudo
sudo bash -c "mv /home/jira-plugins/installed-plugins/* /var/atlassian/application-data/jira/plugins/installed-plugins/"
Run Code Online (Sandbox Code Playgroud)
Gör*_*org 11
当您sudo ls列出文件夹时,我假设普通用户无法读取路径中的一个或多个目录。这将解释这种行为。这里的关键误解是何时完成了 的 glob 扩展*。它是由 shell 在调用任何命令之前完成的。如果外壳没有足够的权限,则无法对其进行扩展。
在这种情况下发生的更详细的是:
/home/jira-plugins/installed-plugins自己的身份阅读,因此无法扩展 glob 模式/home/jira-plugins/installed-plugins/*。它将保持不变。过了这个阶段,*就不再特别了。sudo使用参数调用命令mv /home/jira-plugins/installed-plugins/*,并且/var/atlassian/application-data/jira/plugins/installed-plugins/sudomv使用参数调用/home/jira-plugins/installed-plugins/*,和/var/atlassian/application-data/jira/plugins/installed-plugins/mv尝试移动实际命名为 的文件/home/jira-plugins/installed-plugins/*,但它不存在,因此出现错误消息。