Di chuyển tất cả các tập tin từ thư mục con vào thư mục hiện tại?


13

Làm cách nào tôi có thể di chuyển các tệp có trong tất cả các thư mục con sang thư mục hiện tại và sau đó xóa các thư mục con trống?

Tôi tìm thấy câu hỏi này , nhưng điều chỉnh câu trả lời cho:

mv * .

đã không làm việc; Tôi đã nhận được rất nhiều cảnh báo giống như:

mv: wil and ./wil are identical

Các tệp có trong thư mục con có tên duy nhất.

Câu trả lời:


22

Bạn cũng có thể sử dụng -mindepthtùy chọn:

find . -type f -mindepth 2 -exec mv -i -- {} . \;

(Cùng với -maxdepthbạn cũng có thể giới hạn các cấp độ phân cấp để thu thập các tệp.)

Tôi đã sử dụng mv -i(tương tác trực tiếp) để mvyêu cầu trước khi ghi đè tập tin. Với rất nhiều thư mục con, có thể có các cuộc đụng độ tên mà bạn muốn được cảnh báo.

Các --tùy chọn dừng việc xử lý tùy chọn, vì vậy mvkhông bị lẫn lộn bởi tên tập tin bắt đầu với một dấu gạch ngang.

Dọn dẹp toàn bộ các thư mục con trống với

find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;

Có cách nào để bỏ qua câu hỏi để ghi đè các tập tin bằng cách không ghi đè lên chúng không?
Filnor

2
Tùy chọn cho mv :: -n, --no-clobberkhông ghi đè lên tệp hiện có. Bạn có thể quan tâm -b, --backup, quá.
Florian Jenn

5

Thử cái này:

find ./*/* -type f -print0 | xargs -0 -J % mv % .

Thông tin thêm: Hãy thử tìm kiếm một mình, nó sẽ cung cấp cho bạn một danh sách với tất cả các tệp bạn muốn di chuyển (bỏ qua -print0). Thí dụ:

probe:test trurl$ find ./*/* -type f
./test_s/test_s_s/testf4
./test_s/test_s_s/testf5
./test_s/testf1
./test_s/testf2
./test_s/testf3
./test_s2/testf6
./test_s2/testf7

với -print0xargsbạn hiện đang tạo một danh sách các câu lệnh sẽ được thực thi. Các -J %phương tiện cờ, chèn các yếu tố danh sách ở đây, vì vậy mv $FILE .được thực hiện cho mỗi tập tin được tìm thấy.

Ở trên đang làm việc cho các xargs BSD. Nếu bạn đang sử dụng phiên bản GNU (Linux), hãy -I %thay thế-J %


0

Bash 4:

shopt -s globstar
for file in **; do [[ -f "$file" ]] && mv "$file" .; done

-2

1 mẹo nhanh, chỉ hoạt động nếu tệp của bạn có tiện ích mở rộng (có dấu chấm):

mv *.* subdir/
mv .* subdir/

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.