Tôi có thể chuyển hàng loạt tệp trong nhiều thư mục / thư mục riêng biệt sang một thư mục chính duy nhất trong windows không?


0

Tôi có rất nhiều tập tin ở những vị trí như thế này:

C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1)/(filename1).ext

.../(filename2)/(filename2).ext

.../(filename3)/(filename3).ext

Tôi đang cố gắng để di chuyển hàng loạt .ext tập tin vào thư mục mẹ vì vậy nó:

C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext

Về cơ bản loại bỏ sự cần thiết của thư mục con, giống như lấy các bộ chia ra khỏi chất kết dính trường học.


1
Xin lưu ý rằng Siêu người dùng không phải là một dịch vụ viết kịch bản. Nếu bạn cho chúng tôi biết những gì bạn đã cố gắng cho đến nay (bao gồm mọi tập lệnh bạn đang sử dụng) và nơi bạn bị mắc kẹt thì chúng tôi có thể cố gắng giúp đỡ với các vấn đề cụ thể. Bạn cũng nên đọc Làm thế nào để tôi hỏi một câu hỏi hay? .
DavidPostill

Câu trả lời:


1

Bạn có thể phải làm điều này với cygwin , mà tôi muốn giới thiệu cho bất kỳ ai (vẫn ??) chạy phần mềm gián điệp M $ Windoze.

Một cái gì đó như thế này sẽ làm việc. Thực hiện nó trong thư mục C:/Users/(Username)/Desktop/(Parent-Collection name)/ (mà trong cygwin sẽ được gọi là /cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/):

for i in `find . -name "*" -type f`; 
    do mv $i `echo $i | sed 's/.*\/\([^/]*\)/\1/'`; 
done

Điều đó sẽ di chuyển tất cả các tập tin trong tất cả các thư mục dưới đây (Parent-Collection name) đến (Parent-Collection name). Cụ thể, đây là một do vòng lặp với chỉ mục i lặp qua mọi tập tin từ thư mục hiện tại trở xuống. Đó là những gì find danh sách lệnh. Bạn có thể tra cứu cú pháp bằng cách chạy man find. Sau đó, những gì bạn thực hiện là để di chuyển ( mv ) tập tin đó ( $i ) đến vị trí mới. Vị trí mới được chỉ định bởi tên tệp gốc ( echo $i ) chạy qua trình chỉnh sửa luồng ( sed, mà bạn có thể tìm kiếm với man sed ) được thiết lập để loại bỏ đường dẫn, để lại tên tệp cơ sở.

Tôi đề nghị thử nghiệm nó (tạo một thư mục với một vài thư mục con có chứa một số tệp văn bản trống hoặc một cái gì đó) và đảm bảo có một bản sao lưu!

Sau đó, bạn có thể muốn xóa tất cả các thư mục (bây giờ trống) bên dưới thư mục hiện tại của bạn:

for i in `find . -name "*" -type d`; 
    do rmdir $i; 
done

Điều khác biệt duy nhất ở đây là bạn đang nói find để tìm thư mục ( -type d ) chứ không phải tập tin ( -type f ) và sau đó loại bỏ các thư mục đó ( rmdir, chỉ hoạt động trên các thư mục trống).

Linux không tuyệt sao? Cygwin cung cấp cho bạn một số sức mạnh của linux và có thể là bước đầu tiên giúp bạn đủ thoải mái với nó mà một ngày nào đó bạn thậm chí có thể tìm thấy nó trong bạn để chuyển sang một thứ như Ubuntu. :)


Cảm ơn bạn đã trả lời. Tôi đang sử dụng một trong những cửa sổ cũ trở lại khi nó không tệ Ngoài ra, tôi dự định thực hiện thiết lập ba lần khởi động một khi tôi xây dựng thay thế cho máy tính này.
zackoftrades333

Multi-boot không thực sự là một ý tưởng tốt trong những ngày này. Tốt nhất để sử dụng một hệ điều hành và sau đó nếu bạn cần người khác, hãy chạy chúng Dưới HĐH chính của bạn. Thật dễ dàng với Virtualbox (VB). Vì vậy, cài đặt VB trong Win và sau đó cài đặt Ubuntu trong VB - hoặc ngược lại, hoặc bất kỳ hệ điều hành nào khác. Vấn đề với multi-boot là hệ điều hành không "nói chuyện" với nhau vì bạn chỉ chạy một lúc. Đó là những gì tôi đã làm. Tôi bắt đầu với cygwin, sau đó tôi chuyển sang ubfox trong VB, sau đó tôi chuyển sang ubfox với Win trong VB vì một vài điều đã xuất hiện. Cuối cùng, tôi đã hoàn toàn thắng Win.
Diagon

Tôi dự định có các hệ điều hành với các chương trình của chúng trên một ổ SSD trong khi có tất cả dữ liệu của tôi trên một ổ cứng riêng nếu điều đó tạo ra sự khác biệt nên hy vọng tôi sẽ không cần chúng "nói chuyện với nhau". Ngoài ra, virtualbox cũng giới thiệu một số chi phí và công cụ cũng như chạy tự nhiên.
zackoftrades333

Đúng như vậy với chi phí chung, nhưng điều đó thực sự phụ thuộc vào những gì bạn muốn làm. Bạn sẽ không chơi game trong VB, chắc chắn là vậy! Phương pháp đa khởi động sẽ khiến bạn bị mắc kẹt khi bạn ở một hệ điều hành muốn làm điều gì đó ở hệ điều hành khác và không muốn thực hiện việc khởi động lại cho việc đó. Ngoài ra, giả sử bạn đang sử dụng Win, với NTFS và linux với ... ext4? btrfs? Bạn sẽ thấy rằng các hệ thống tập tin này không hoạt động rất tốt. Dù sao, tôi đã thử nó ở đâu đó trên đường đi và rất nhanh chóng kết luận rằng nó không thực sự là một lựa chọn. Bạn có thể cần phải thử nó cho chính mình.
Diagon

Tôi đã mở Cygwin và điều hướng đến đúng thư mục, nhưng tôi gặp khó khăn trong việc hiểu lệnh bạn đã gõ. Bạn có thể chia nhỏ các phần và giải thích nó để tôi có thể hiểu rõ hơn?
zackoftrades333

1

Điều này có thể được thực hiện với Powershell, mặc dù chúng tôi không biết phiên bản Windows bạn đang sử dụng.

$sourcefolder = "C:\Users\username\Desktop\ParentCollectionName"

$allfiles = Get-ChildItem -Recurse $sourcefolder | Where-Object {$_.PSIScontainer -eq $false}
ForEach ($file in $allfiles)
    {
        $destinationfolder = Split-Path -Parent $file.Directory.FullName
        Move-Item $file.FullName $destinationfolder
    }

Tất cả các tệp trong thư mục con của $sourcefolder sẽ được chuyển đến ParrentCollectionName thư mục. Sau đó, bạn có thể xóa các thư mục con trống.

Nguồn

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.