2009-05-15 34 views
23

Thư mục cũ và mới của tôi có cùng thư mục và tập tin bên trong.Lệnh Linux để di chuyển một thư mục

tôi cố gắng:

mv -if old/* new/* 

và nhận được lỗi

mv: không thể di chuyển './xxxxxx' đến một thư mục con của chính nó

Làm thế nào tôi có thể di chuyển nó?

+10

này là một câu hỏi hoàn toàn hay thuộc về StackOverflow. Cấp, đó là một sai lầm ngây thơ - nhưng đó là những gì SO là cho; nó giúp mọi người vượt qua sự ngây thơ bằng cách cho phép họ đặt câu hỏi và học hỏi từ câu trả lời. Xem SO Blog và Podcast # 53 (Joel nói không có câu hỏi nào quá đơn giản đối với Stack Overflow ...). –

+0

Nhưng nó không phải là một câu hỏi lập trình. Nó không thuộc về ServerFault? –

+0

ServerFault vẫn đang ở phiên bản beta riêng tư! – alamar

Trả lời

29

Bạn nên sử dụng mv -if old/* new/ không có dấu sau *.

này là bởi vì nó trải ra để

mv -if old/foo old/bar old/baz new/foo new/bar new/baz 

ví dụ: di chuyển tất cả mọi thứ vào mới/baz

Đây không phải là những gì bạn muốn.

+0

Tôi đã viết sai. mv -if cũ/* mới/ không hoạt động – Qooe

+2

'Không hoạt động' là vô ích. Nó nói gì? Điều gì xảy ra khi bạn cố gắng? – alamar

5
[email protected]:/tmp/experiment$ ls a 
11 22 33 
[email protected]:/tmp/experiment$ ls b 
22 33 
[email protected]:/tmp/experiment$ ls 
a b 
[email protected]:/tmp/experiment$ mv a/* b 
[email protected]:/tmp/experiment$ ls a 
[email protected]:/tmp/experiment$ ls b 
11 22 33 

Nó hoạt động. Bạn đang cố gắng đạt được điều gì? Bạn có thể viết một ví dụ ngắn về dữ liệu đầu vào trông như thế nào và dữ liệu đầu ra sẽ trông như thế nào? Sự thật là tôi không biết bạn đang cố làm gì :) Giúp tôi giúp bạn.

1

Nếu bạn đang sao chép từ hệ thống tệp ext2/3/4 sang hệ thống tệp FAT32 và tên tệp có ký tự không hợp lệ đối với quy ước đặt tên FAT32, bạn sẽ nhận được thông báo lỗi địa ngục khó chịu và không chính xác này. Làm sao tôi biết? Tôi vật lộn với lỗi này - vâng, đó là một KERNEL BUG - trong 6 giờ trước khi nó phát hiện ra tôi. Tôi nghĩ đó là một lỗi thông dịch viên vỏ, tôi nghĩ đó là lỗi "mv" - tôi đã thử nhiều trình bao khác nhau, mọi thứ. Hãy thử thử nghiệm này: trên một hệ thống tệp ext, "chạm vào" a: b '"chúng" mv "nó vào hệ thống tệp FAT32. Hãy thử nó, bạn sẽ tận hưởng (ghét) kết quả. Điều này cũng đúng cho '<' và '>' (\ 074 và \ 076).

Cảm ơn "man mv" - đó thực sự là một trợ giúp lớn, đừng bỏ công việc ban ngày của bạn.

1

Có thể bạn đã có câu trả lời nhưng câu trả lời ở trên không hiệu quả đối với tôi .... và cuối cùng là rất nhiều nghiên cứu tôi nhận được câu trả lời. (Vấn đề là do quyền sở hữu tệp)
và chỉ cần đặt sudo trước lệnh và hoạt động của nó .... :) Điều tương tự cho lệnh cp và mv.

sudo mv -if old/* new/ 
2

lưu ý rằng mv a/b */không di chuyển các file * (tên tập tin bắt đầu với '') trong một/để b/

ví dụ:.

$ mkdir -p a/d b && touch a/f a/.f a/d/.f 
$ mv a/* b/ 
$ ls -a a/ 
. .. .f 
Các vấn đề liên quan