Wie verwende ich Shell Wildcards mit Sudo?

14

Ich versuche, den gesamten Inhalt von Ordner1 herauszunehmen und in den Ordner images_temp zu legen, in dem sich Ordner1 befindet:

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

Ich erhalte diesen Fehler oben, ich habe versucht, die Antwort hier nachzuschlagen, aber es gibt Antworten, von denen ich glaube, dass sie nicht auf meine Situation zutreffen. Bitte helfen Sie.

[email protected] [~]# 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

Außerdem habe ich diesen Fehler erhalten:

[email protected] [~/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.
[email protected] [~/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
Daniel
quelle
2
Sind Sie sicher, dass sich Dateien darin befinden folder1?
SYN
Ja, ich glaube, ich weiß, was passiert ist. Ich habe diese Ordner über root vom lokalen Computer auf den Server hochgeladen und erhalte jetzt keinen Zugriff über den Benutzernamen.
Daniel
Also brauchen wir wahrscheinlich mehr Infos. Es könnte durchaus das Berechtigungsproblem sein, aber Sie haben es mit sudo versucht, wodurch Berechtigungsprobleme gemindert werden sollten. Können Sie die Ausgabe von diesem Befehl bereitstellen, bitte:pwd && ls -l
0xSheepdog
Weitere Informationen hinzugefügt
Daniel
1
Ihr ls -lzeigt an, dass folder1es nicht existiert. Das würde erklären, warum der Versuch, Dateien daraus zu kopieren, fehlschlägt.
Dhag

Antworten:

23

Im

sudo mv folder1/* .

Ihre Shell (die so läuft wie Sie , nicht root) erweitert diesen folder1/*Glob (und versucht, ihn zu erweitern) .

Dies führt zu einer Reihe von Argumenten, an die weitergegeben werden muss sudo mv. Hier haben Sie jedoch (im Gegensatz zu root) keinen Lesezugriff auf dieses Verzeichnis, sodass der Glob keiner Datei entspricht. Ihre Shell ist eine dieser kaputten (IMO) Shells, bashoder shwenn ein Glob nicht übereinstimmt, wird er unverändert übergeben.

Anstatt dass die Shell einen Fehler zurückgibt, der Ihnen mitteilt, dass sie keine Datei gefunden hat, die diesem Muster entspricht, hat sie die folder1/*Zeichenfolge buchstäblich als Argument an übergeben sudo mv. Und mvbeschwert sich, dass es keine aufgerufene Datei finden kann folder1/*(in diesem Fall zum Glück harmlos).

Hier möchten Sie, dass dieser Glob um root erweitert wird. Sie müssen also eine Shell als root starten , um diesen Glob zu erweitern:

sudo sh -c 'mv folder1/* .'
Stéphane Chazelas
quelle
gute Antwort. Es wäre großartig zu wissen, welche Muscheln, wenn überhaupt, im Gegensatz zu shund nicht in Bezug auf das Globbing "gebrochen" sind bash.
Gregory
@gregory, zum Beispiel das Pre-Bourne-Sh oder csh, tcsh (das sich wie das Pre-Bourne-Sh verhält) oder fish oder zsh. In Bash können Sie die failglobOption festlegen , um ein ähnliches Verhalten zu erhalten.
Stéphane Chazelas