Bagaimana cara menggunakan shell wildcard dengan sudo?

14

Saya mencoba mengeluarkan semua isi folder1 dan memasukkannya ke folder images_temp yang ada di folder1:

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

Namun saya mendapatkan kesalahan di atas, saya mencoba mencari jawabannya di sini tetapi ada jawaban yang saya yakin tidak berlaku untuk situasi saya. Tolong bantu.

[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

Juga, saya mendapatkan kesalahan ini:

[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
sumber
2
Apakah Anda yakin ada file di dalamnya folder1?
SYN
ya, jadi saya pikir saya tahu apa yang terjadi, saya mengunggah folder ini dari mesin lokal ke server melalui root dan itu tidak memberi saya akses melalui nama pengguna sekarang.
Daniel
jadi kami mungkin perlu info lebih lanjut. itu bisa jadi masalah izin, tetapi Anda mencobanya dengan sudo yang harus mengurangi masalah izin. Bisakah Anda memberikan output dari perintah ini, silakan:pwd && ls -l
0xSheepdog
menambahkan info lebih lanjut
Daniel
1
Anda ls -lmenunjukkan bahwa folder1tidak ada. Itu akan menjelaskan mengapa mencoba menyalin file dari itu gagal.
Dhag

Jawaban:

23

Di

sudo mv folder1/* .

Shell Anda (jadi berjalan seperti Anda , tidak root) berkembang (well, mencoba untuk memperluas) folder1/*gumpalan itu.

Itu menghasilkan sejumlah argumen untuk diteruskan sudo mv. Namun di sini, Anda (bertentangan dengan root) tidak memiliki akses baca ke direktori itu, sehingga glob gagal mencocokkan file apa pun. Kerang Anda adalah salah satu dari kerang yang rusak (IMO) seperti bashatau di shmana ketika gumpalan tidak cocok, ia dilewatkan begitu saja.

Jadi alih-alih shell mengembalikan kesalahan untuk memberi tahu Anda tidak menemukan file yang cocok dengan pola itu, ia meneruskan folder1/*string tersebut sebagai argumen sudo mv. Dan mvmengeluh bahwa itu tidak dapat menemukan file yang disebut folder1/*(untungnya tidak berbahaya dalam kasus ini).

Di sini, Anda ingin agar gumpalan itu diperluas oleh root, jadi Anda harus memulai sebuah shell sebagai root untuk memperluas gumpalan itu:

sudo sh -c 'mv folder1/* .'
Stéphane Chazelas
sumber
jawaban bagus. Akan lebih baik untuk mengetahui yang, jika ada, cangkang tidak "rusak" sehubungan dengan globbing, tidak seperti shdan bash.
gregory
@gregory, pre-Bourne sh misalnya, atau csh, tcsh (yang berperilaku seperti pre-Bourne sh), atau fish atau zsh. Di bash, Anda bisa mengatur failglobopsi untuk mendapatkan perilaku serupa.
Stéphane Chazelas