Làm cách nào để di chuyển tệp và thư mục vào thư mục mẹ trong Linux?


Câu trả lời:


66
tìm thấy . -maxdepth 1 -exec mv {} .. \;

điều này cũng sẽ di chuyển các tập tin ẩn.

Bạn sẽ nhận được tin nhắn:

mv: không thể di chuyển `. ' đến `../. ': Thiết bị hoặc tài nguyên bận

khi nó cố di chuyển .(thư mục hiện tại) nhưng điều đó sẽ không gây ra tác hại gì.


1
Nó cũng sẽ di chuyển tất cả các tệp từ tất cả các thư mục con sang thư mục mẹ của thư mục hiện tại. Tôi chắc chắn sẽ sử dụng -maxdepth 1.
ℝaphink

1
Bây giờ nó nói: mv: không thể di chuyển ./scripts' to ../scripts ': Thư mục không trống

1
Bạn phải có một thư mục được gọi là script trong thư mục mẹ VÀ trong thư mục hiện tại của bạn. Bạn sẽ phải đổi tên cái này trước khi bạn di chuyển nó.
ℝaphink

1
Nó hoạt động nhưng bạn đã để lại một thông tin rất quan trọng - bạn phải chạy nó từ thư mục con. Ngoài ra, điều này sẽ không xóa chính thư mục con, do đó bạn phải sao lưu một thư mục và thực hiện rmdir trên thư mục con.
crafter

89

Tôi đến đây vì tôi cũng mới với chủ đề này. Vì một số lý do, những điều trên không làm được điều đó cho tôi. Những gì tôi đã làm để di chuyển tất cả các tệp từ một thư mục đến thư mục mẹ của nó là:

cd to/the/dir
mv * ../

12
Điều này không di chuyển tập tin ẩn mặc dù
Wavesailor

1 lớp lót:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd

10

Nhập cái này vào vỏ:

mv *.* ..

Điều đó di chuyển TẤT CẢ các tập tin lên một cấp.

Nhân vật *là một ký tự đại diện. Vì vậy, *.debsẽ di chuyển tất cả các tệp .deb và Zeitgeist.*sẽ di chuyển Zeitgeist.avi và Zeitgeist.srt một thư mục lên, vì, tất nhiên, ..chỉ ra thư mục mẹ.

Để di chuyển mọi thứ, kể cả thư mục, v.v., chỉ cần sử dụng *thay vì*.*


3
Điều này đã không làm việc với các dirs! hoặc các tập tin ẩn

Nó hoạt động với dirs, ít nhất là đối với tôi.
maaartinus

5
Bạn muốn *không *.*bao gồm các thư mục
Chris S

Đây là một bộ phim tài liệu hay
BlackBurn027

6

Nó không thể đơn giản hơn:

mv * ../

Để di chuyển các tập tin ẩn:

mv /path/subfolder/{.,}* /path/ 

mvlà một lệnh để di chuyển tệp, *có nghĩa là tất cả các tệp và thư mục và ../là đường dẫn đến thư mục mẹ.


2

Trong bash, bạn có thể sử dụng shopg -s dotglob để tạo * khớp tất cả các tệp và di chuyển chúng đơn giản bằng cách

shopt -s dotglob; mv * ..

Đây không phải là giải pháp tốt nhất vì cài đặt là vĩnh viễn cho vỏ cho đến khi bạn thay đổi nó bằng

shopt -u dotglob

nhưng tôi nghĩ thật tốt khi biết điều đó


4
Gọi nó trong một subshell : (shopt -s dotglob && mv * ..). Bằng cách đó, tùy chọn chỉ là cục bộ cho subshell đó.
Martin Uting

Câu trả lời hay - đơn giản, bao gồm các tệp ẩn và không gây ra lỗi khi sao chép '.' và '..'
Daniel Howard

1

Một phương pháp không gây ra lỗi và hoạt động mọi lúc:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done

1
find . -maxdepth 2 -type f -exec mv {} .. \;

Tôi đã sử dụng một biến thể ở trên để di chuyển tất cả các tệp từ thư mục con vào phụ huynh.

Tôi đã nhận được dữ liệu trong các thư mục theo năm, nhưng được tìm thấy bằng cách sử dụng siêu dữ liệu, tôi có thể có tất cả chúng trong cùng một thư mục giúp quản lý dễ dàng hơn.

ví dụ.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3

0

Giả sử tất cả các tệp ẩn của bạn bắt đầu bằng dấu chấm theo sau là một chữ cái hoặc một số (mà chúng nên), bạn có thể sử dụng

mv * .[A-Za-z0-9]* ..

Một .[A-Za-z0-9]*phần là để đảm bảo bạn không cố gắng di chuyển .hoặc di chuyển .., điều này sẽ thất bại.


0

Thật đơn giản để di chuyển tất cả các tệp và thư mục vào thư mục mẹ trong Linux.

Chuyển đến thư mục đó và sử dụng lệnh này:

mv * /the full path

Ví dụ: nếu các tệp và thư mục của bạn như sau:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

Chuyển đến thư mục đó qua cd:

cd /home/abcuser/test
mv * /home/abcuser

Tất cả các tệp và thư mục của bạn sẽ chuyển đến thư mục abcuser (thư mục mẹ).


2
Cảm ơn @Gareth, cũng sắp sửa như vậy. Abhishek, xin vui lòng không đăng bất kỳ liên kết không liên quan, ý nghĩa trong đó là gì? Ngoài ra, hãy kiểm tra định dạng của bạn xin vui lòng. Ngoài ra, /the full pathkhông hoạt động trong Linux, bạn phải thoát không gian với /the\ full\ path.
slhck

0

Không cần phải thay đổi thư mục. Chỉ cần bao gồm * ở cuối đường dẫn:

mv /my/folder/child/* /my/folder/

Ở trên chỉ di chuyển các tập tin không ẩn. Để di chuyển chỉ các tập tin ẩn sử dụng. *

mv /my/folder/child/.* /my/folder/

Trên hai có thể được kết hợp thành một lệnh:

mv /my/folder/child/{.,}* /my/folder/

Xem thêm: Cách di chuyển tất cả các tệp bao gồm các tệp ẩn vào thư mục mẹ qua *


0
find -type f|while read line; do mv $line ${line##*/}; done

Cảm ơn đã đóng góp một câu trả lời. Mặc dù điều này có thể hoạt động trong các tình huống đơn giản, nhưng đường ống findvào while readlà một cách sử dụng tồi findvà câu trả lời tốt hơn đã được đăng.
Scott

-1

chuyển sang thư mục con và thực hiện lệnh sau để sao chép hoặc di chuyển tệp.

ví dụ: a là thư mục mẹ và b là thư mục con, chúng tôi muốn di chuyển / sao chép tất cả các tệp từ b sang a (thư mục con sang thư mục mẹ).

cd b
cp * ..
mv * ..

Chào mừng bạn đến với Siêu người dùng! Điều này trùng lặp một câu trả lời khác và không thêm nội dung mới. Vui lòng không đăng câu trả lời trừ khi bạn thực sự có điều gì đó mới để đóng góp.
DavidPostill
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.