Làm thế nào để sử dụng shell wildcard với sudo?


14

Tôi đang cố gắng lấy ra tất cả nội dung của thư mục1 và thả nó vào thư mục images_temp mà thư mục1 đang ở:

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

Tuy nhiên, tôi đã nhận được lỗi ở trên, tôi đã cố gắng tìm kiếm câu trả lời ở đây nhưng có những câu trả lời mà tôi không tin áp dụng cho tình huống của tôi. Xin vui lòng giúp đỡ.

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

Ngoài ra, tôi đã nhận được lỗi này:

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
Bạn có tích cực có tập tin bên trong folder1?
SYN

vâng, vì vậy tôi nghĩ rằng tôi biết chuyện gì đã xảy ra, tôi đã tải các thư mục này từ máy cục bộ lên máy chủ thông qua root và hiện tại nó không cho tôi quyền truy cập thông qua tên người dùng.
Daniel

vì vậy chúng tôi có thể cần thêm thông tin. nó cũng có thể là vấn đề quyền, nhưng bạn đã thử nó với sudo để giảm thiểu vấn đề quyền. Bạn có thể cung cấp đầu ra từ lệnh này không, vui lòng:pwd && ls -l
0xSheepdog

đã thêm thông tin
Daniel

1
Của bạn ls -lchỉ ra rằng folder1không tồn tại. Điều đó sẽ giải thích tại sao cố gắng sao chép các tập tin từ nó thất bại.
dhag

Câu trả lời:


23

Trong

sudo mv folder1/* .

Shell của bạn (vì vậy chạy như bạn , không root) đang mở rộng (tốt, cố gắng mở rộng) toàn folder1/*cầu.

Điều đó dẫn đến một số đối số để chuyển đến sudo mv. Tuy nhiên, ở đây, bạn (trái với root) không có quyền truy cập đọc vào thư mục đó, vì vậy toàn cầu không khớp với bất kỳ tệp nào. Vỏ của bạn là một trong những vỏ bị hỏng (IMO) như thế bashhoặc shkhi một quả địa cầu không khớp, nó sẽ được chuyển như hiện trạng.

Vì vậy, thay vì shell trả về một lỗi để cho bạn biết nó không tìm thấy bất kỳ tệp nào khớp với mẫu đó, nó đã chuyển folder1/*chuỗi theo nghĩa đen như là một đối số sudo mv. Và mvphàn nàn rằng nó không thể tìm thấy một tập tin được gọi là folder1/*(rất may là vô hại trong trường hợp này).

Tại đây, bạn muốn toàn cầu được mở rộng bằng root, vì vậy bạn cần bắt đầu một shell làm root để mở rộng toàn cầu đó:

sudo sh -c 'mv folder1/* .'

câu trả lời tốt đẹp Sẽ thật tuyệt khi biết cái nào, nếu có, vỏ không bị "vỡ" đối với sự hình thành, không giống shbash.
phái

@gregory, ví dụ sh trước Bourne, hoặc csh, tcsh (hoạt động giống như pre-Bourne sh), hoặc cá hoặc zsh. Trong bash, bạn có thể đặt failglobtùy chọn để có hành vi tương tự.
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.