如何在sudo中使用shell通配符?


14

我正在尝试取出folder1的所有内容,并将其放入folder1所在的images_temp文件夹中:

jeatonhomes@jeatonhomes.com [~/images_temp]# sudo mv folder1/* .
mv: cannot stat `folder1/*': No such file or directory

但是我在上面遇到了这个错误,我试图在这里查找答案,但是有些答案我认为不适用于我的情况。请帮忙。

jeatonhomes@jeatonhomes.com [~]# pwd && ls -l
/home/jeatonhomes
total 108
drwx--x--x  18 jeatonhomes jeatonhomes 4096 Apr  3 13:25 ./
drwx--x--x 106 root        root        4096 Mar 30 16:19 ../
lrwxrwxrwx   1 jeatonhomes jeatonhomes   37 Dec 18  2015 access-logs -> /usr/local/apache/domlogs/jeatonhomes/
-rw-------   1 jeatonhomes jeatonhomes  628 Apr  3 13:25 .bash_history
-rw-r--r--   1 jeatonhomes jeatonhomes   18 Sep 22  2015 .bash_logout
-rw-r--r--   1 jeatonhomes jeatonhomes  176 Sep 22  2015 .bash_profile
-rw-r--r--   1 jeatonhomes jeatonhomes  124 Sep 22  2015 .bashrc
drwxr-xr-x   2 jeatonhomes jeatonhomes 4096 Aug  4  2016 cache/
-rw-r-----   1 jeatonhomes jeatonhomes   20 Jan  4 14:10 .contactemail
drwx------   5 jeatonhomes jeatonhomes 4096 Mar 20 22:39 .cpanel/
drwx------   4 jeatonhomes jeatonhomes 4096 Aug  4  2016 .cphorde/
-rw-rw-r--   1 jeatonhomes jeatonhomes   15 Apr  3 13:26 .dns
drwxr-x---   2 jeatonhomes mail        4096 Jul 22  2016 etc/
-rw-------   1 jeatonhomes jeatonhomes   17 Mar  8 22:39 .ftpquota
drwxr-x---   2 jeatonhomes nobody      4096 Dec 18  2015 .htpasswds/
drwxr-xr-x   2 root        root        4096 Apr  3 13:45 images_temp/
-rw-------   1 jeatonhomes jeatonhomes  211 Jan  4 14:09 .lastlogin
drwx------   2 jeatonhomes jeatonhomes 4096 Apr  1 08:16 logs/
drwxr-x--x   8 jeatonhomes jeatonhomes 4096 Dec 18  2015 mail/
drwxrwxr-x   4 jeatonhomes jeatonhomes 4096 Jan  4 14:27 perl5/
drwxr-x---   3 jeatonhomes jeatonhomes 4096 Dec 18  2015 public_ftp/
drwxr-x---   7 jeatonhomes nobody      4096 Apr  3 06:06 public_html/
drwx------   2 jeatonhomes jeatonhomes 4096 Jan  4 14:10 .ssh/
drwxr-xr-x   5 jeatonhomes jeatonhomes 4096 Feb 15 06:34 ssl/
drwx------   2 jeatonhomes jeatonhomes 4096 Nov  3 22:55 .subaccounts/
drwxr-xr-x   7 jeatonhomes jeatonhomes 4096 Jul  6  2016 tmp/
drwx------   2 jeatonhomes jeatonhomes 4096 Dec 18  2015 .trash/
lrwxrwxrwx   1 jeatonhomes jeatonhomes   11 Dec 18  2015 www -> public_html/
-rw-r--r--   1 jeatonhomes jeatonhomes  658 Nov 10  2015 .zshrc

另外,我得到了这个错误:

jeatonhomes@jeatonhomes.com [~/public_html]# wp media import 
/home/jeatonhomes/images_temp/* --title="Images for East 46th West 59th and Sycamore Road" --alt="New Images  for April"
Warning: copy(/home/jeatonhomes/images_temp/62262529_0.jpg): failed to open stream: Permission denied in phar:///usr/local/bin/wp/php/commands/media.php on line 292
Error: Could not create temporary file for /home/jeatonhomes/images_temp/62262529_0.jpg.
jeatonhomes@jeatonhomes.com [~/public_html]# sudo wp media import /home/jeatonhomes/images_temp/* --title="Images for East 46th West 59th and Sycamore Road" --alt="New Images  for April"
[sudo] password for jeatonhomes:
sudo: wp: command not found

2
您肯定内部有文件folder1吗?
SYN

是的,所以我想我知道发生了什么事,我通过根目录将这些文件夹从本地计算机上载到服务器,并且现在没有通过用户名进行访问。
丹尼尔(Daniel)

因此我们可能需要更多信息。这很可能是权限问题,但是您使用sudo尝试了一下,这应该可以缓解权限问题。您能否提供此命令的输出,请:pwd && ls -l
0xSheepdog

添加了更多信息
Daniel

1
您的ls -l指示folder1不存在。那可以解释为什么尝试从中复制文件失败。
dhag

Answers:


23

sudo mv folder1/* .

您的外壳程序(正在以您的身份运行,而不是root)正在扩展(嗯,试图扩展)该folder1/*glob。

结果导致有许多参数要传递给sudo mv。但是,在这里,您(与相对root)没有对该目录的读取访问权,因此glob无法匹配任何文件。您的外壳是那些损坏的(IMO)外壳之一,bash或者sh当glob不匹配时按原样传递。

因此,shell没有返回错误告诉您没有找到与该模式匹配的任何文件的错误,而是直接将folder1/*字符串作为参数传递给sudo mv。并且mv抱怨它找不到名为folder1/*(在这种情况下无害)文件。

在这里,您希望该glob由root扩展,因此您需要以root用户身份启动shell 来扩展该glob:

sudo sh -c 'mv folder1/* .'

好答案。很高兴知道,对于哪一个,如果有的话,壳不会像shand 那样被“破坏” bash
gregory

@gregory,例如,Bourne之前的sh或csh,tcsh(其行为类似于pre-Bourne sh)或fish或zsh。在bash中,您可以设置failglob选项以获得类似的行为。
斯特凡Chazelas
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.