Điểm:8

lỗi khi cố mv một tệp có -r trong tên tệp

lá cờ in

Đây là vấn đề của tôi:

Tôi có một tệp có -r trong tên: -r.jpg

Khi tôi cố gắng làm một mv *.jpg cũ/ Tôi có:

mv: tùy chọn không hợp lệ -- 'r'

Ngay cả đối với

for g in *.jpg;do echo $g &&mv "${g}" old/;done

Tôi có cùng một lỗi.

paladin avatar
lá cờ id
Sử dụng `mv -- *.jpg old/`, `--` vô hiệu hóa tất cả các "tham số" bổ sung sau `--`.
lá cờ pl
Thật tốt là bạn đã không thử `rm` một tệp bao gồm `-rf` ...
Điểm:16
lá cờ kz

Hầu hết các tiện ích dòng lệnh đều có một điều khoản để tách tùy chọn từ tranh luận.

Điều đó ngăn ngừa vô số vấn đề với "đặc biệt" tên tệp trông giống như tùy chọn.

Dấu phân cách phổ biến nhất cho thấy phần cuối của các tùy chọn là hai dấu gạch nối -- hoặc -- cũng được hỗ trợ bởi mv.

Nói cách khác:

 mv [TÙY CHỌN] -- NGUỒN ĐÍCH

hoặc vì bạn không chỉ định bất kỳ tùy chọn nào:

 mv -- *.jpg cũ/
Điểm:2
lá cờ cn

Giải pháp đơn giản nhất là thêm vào trước tên tệp bằng ./ mô tả đường dẫn tương đối

cho g trong *.jpg; do echo $g && mv "./${g}" old/; xong

Cũng có thể sử dụng đường dẫn tuyệt đối

cho g ở dạng $(pwd)/*.jpg; làm echo $g && mv $g old/; xong

Ngoài ra, bạn có thể muốn sử dụng tìm thấy lệnh vì nó đã cung cấp đường dẫn tương đối (bạn có thể sử dụng lệnh --max-độ sâu nếu bạn chỉ muốn xử lý thư mục hiện tại)

cho g trong $(find . -name "*jpg"); làm mv $g cũ; xong

Và trong trường hợp xấu nhất khi bạn có nhiều ký tự phức tạp không thể phân tích cú pháp, bạn có thể tham khảo các số inode kết hợp với tìm -inum và xử lý các tập tin của bạn cho phù hợp

 $ for g in $(ls -i1 ./*jpg | cut -f1 -d' '); tìm . -inum $g -print0 | xargs -0 -I '{}' mv '{}' cũ; xong
lá cờ in
sử dụng "./" là một gợi ý thông minh; và inum gợi ý một giải pháp rất tốt :)
iBug avatar
lá cờ um
Thực sự không có ký tự "không thể phân tích cú pháp": Tất cả những gì bạn cần làm là trích dẫn các biến một cách chính xác. Trong hầu hết các trường hợp, một cặp dấu ngoặc kép là đủ.
Peter Cordes avatar
lá cờ ke
`mv ./*.jpg old/` sẽ hoạt động; bạn không cần lặp lại từng tệp một.
Peter Cordes avatar
lá cờ ke
@Bussiere: Bản hack `find -inum` không đặc biệt hữu ích trừ khi bạn muốn tìm các liên kết cứng. `tìm . -maxdepth 1 -name '*.jpg' -print0 | xargs -0 mv -t old/` hoặc thứ gì đó tương tự sẽ làm điều tương tự và cuối cùng chạy `mv -t old ./-r.jpg`, giống như lệnh này. (Có thể với nhiều tên tệp khác trên cùng một dòng lệnh). Nó chỉ lãng phí rất nhiều thời gian khi bắt đầu `tìm` để quét toàn bộ cây con để tìm các tệp có số inode đó cho mỗi tệp đầu vào, sau đó in tên tệp. Nó *không* chạy `mv` trên số inode; Các cuộc gọi hệ thống Unix không thể làm điều đó.
Peter Cordes avatar
lá cờ ke
@Bussiere: Điều quan trọng làm cho nó hoạt động (`./*.jpg` thay vì `*.jpg`) đã được sử dụng trên dòng lệnh `ls` để tránh chạy `ls -r.jpg`, phần còn lại là chỉ phí sức mà thôi. Tôi không thể hình dung ra trường hợp nào tìm thấy số inode tốt hơn là chỉ sử dụng khớp tên tệp riêng của find như `-iname` hoặc `-path`, và lý tưởng nhất là sử dụng `-exec mv -t old/ {} +` để tránh thậm chí cần xargs.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.