Làm phẳng một thư mục lồng nhau & Hệ thống phân cấp tệp từ dòng lệnh của Mac OS X
Bạn đã bao giờ cần làm phẳng cấu trúc thư mục, di chuyển tất cả nội dung tệp từ thư mục con của thư mục vào một thư mục chưa? Mặc dù bạn có thể thực hiện việc này theo cách thủ công bằng cách di chuyển xung quanh các tệp và thư mục từ hệ thống tệp của Mac OS X hoặc Linux, nhưng một tùy chọn nhanh hơn là chuyển sang dòng lệnh. Có thể tại một thời điểm bạn đã tạo một hệ thống phân cấp các thư mục lồng nhau mà bây giờ bạn cần hoàn tác bằng cách di chuyển tất cả các tệp ra khỏi các thư mục lồng nhau đó và quay lại một thư mục duy nhất hoặc có thể bạn đang tìm cách đơn giản hóa cấu trúc thư mục, bất kể lý do là gì, điều này thủ thuật hoạt động khá tốt.
Sử dụng dòng lệnh để thực hiện làm phẳng tệp và cấu trúc thư mục rõ ràng là cách tốt nhất dành cho người dùng nâng cao, những người cảm thấy thoải mái với việc sử dụng thiết bị đầu cuối nói chung, nếu điều đó không mô tả về bạn, hãy cân nhắc thực hiện thủ công thông qua Finder hoặc sử dụng ứng dụng Mac Automator để thực hiện tự động hóa tương tự các hoạt động của hệ thống tệp. Tuy nhiên, chúng tôi đang tập trung vào việc làm phẳng thư mục từ dòng lệnh ở đây.
Ví dụ về làm phẳng thư mục tệp lồng nhau
Để hiểu rõ hơn những gì chúng tôi đang cố gắng thực hiện, hãy lấy một ví dụ về cấu trúc thư mục tưởng tượng có tên là TestDirectory nằm trong thư mục Trang chủ của người dùng. Trong ví dụ này, TestDirectory chứa các thư mục con như SubDirectory1, SubDirectory2, SubDirectory3, v.v., mỗi thư mục có các tệp trong các thư mục tương ứng đó. Những gì chúng tôi đang muốn làm ở đây là làm phẳng cấu trúc thư mục, di chuyển tất cả các tệp từ Thư mục con (X) sang thư mục mẹ “TestDirectory”.Thư mục ban đầu và nội dung được hiển thị đệ quy với có thể trông giống như thế này:
$ find ~/TestDirectory/ -type f ~/TestDirectory/rooty.jpg ~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg ~/TestDirectory/SampleDirectory1 /alphabeta-tool.jpg ~/TestDirectory/SampleDirectory2/test-tools.jpg ~/TestDirectory/SampleDirectory3/test-png.jpg ~/TestDirectory/SampleDirectory3/test1.jpg ~/TestDirectory/SampleDirectory3/test2.jpg
Để làm phẳng nội dung của thư mục này và thư mục con trở lại thư mục TestDirectory, bạn sẽ sử dụng chuỗi lệnh sau:
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
Sau khi nội dung thư mục được làm phẳng, nó sẽ trông như thế này khi được liệt kê ra:
~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/TestDirectory/test-png.jpg ~/TestDirectory/test1.jpg ~/TestDirectory/test2.jpg
Lưu ý các thư mục con sẽ vẫn tồn tại, chúng sẽ trống. Có lý? Nếu không, hoặc nếu điều đó không thể hiện được những gì bạn muốn đạt được, thì có lẽ bạn không muốn làm phẳng một thư mục, có thể bạn đang tìm cách hợp nhất hoặc sử dụng ditto để tạo một bản sao phức tạp sang nơi khác.
Làm phẳng cấu trúc thư mục & phân cấp tệp lồng nhau bằng dòng lệnh
Sẵn sàng tiếp tục? Chuỗi lệnh chúng ta sẽ sử dụng để làm phẳng cấu trúc thư mục và di chuyển tất cả các tệp từ thư mục con sang cơ sở của thư mục đích như sau:
find -mindepth 2 -type f -exec mv -i '{}' ';'
Thay thế bằng thư mục bạn chọn để làm phẳng, như minh họa trong ví dụ trên.
Có, thư mục xuất hiện hai lần trong chuỗi lệnh, lần đầu tiên là thư mục được tìm kiếm để làm phẳng các thư mục con và lần thứ hai là đích đến của các mục được tìm thấy.
Hãy xác định chính xác điểm đến đã chỉ định, vì điểm đến này không thể đảo ngược được (tốt, ít nhất là bạn không phải thực hiện nhiều thao tác thủ công), vì vậy chỉ thực hiện việc này nếu bạn hoàn toàn chắc chắn rằng mình muốn chuyển địa điểm tất cả các tệp trong các thư mục con của thư mục đích trở lại thư mục gốc.
Như đã đề cập trước đây, bạn cũng có thể thực hiện việc này trong Finder của OS X hoặc ít nhất là quan sát các thay đổi của tệp và thư mục trong Finder. Tùy chọn+bấm vào các mũi tên nhỏ trong chế độ xem Danh sách sẽ mở ra tất cả các thư mục con, hiển thị phân cấp thư mục như sau:
Sau khi loay hoay với nhiều lựa chọn thay thế bash và zsh, thủ thuật hữu ích này đã được một người bình luận trên StackExcange để lại và cuối cùng nó trở thành phương pháp dễ dàng và tương thích nhất. Nếu bạn biết cách tốt hơn để làm phẳng thư mục lồng nhau, hãy cho chúng tôi biết trong phần nhận xét!