2010-09-01 40 views
5

Bất cứ ai có thể cho tôi một tập lệnh bash hoặc một dòng lệnh tôi có thể chạy trên Linux để đệ quy đi qua từng thư mục từ thư mục hiện tại và xóa tất cả các tệp hoặc thư mục bắt đầu bằng '._ '?Bash script để đệ quy bước qua các thư mục và xóa các tập tin

+1

Chỉ cần thông tin: tệp '._' được gọi là tệp AppleDouble. Trên các hệ thống Mac, các tệp có một ngã ba dữ liệu và một ngã ba tài nguyên. Fork tài nguyên thường chứa thông tin như biểu tượng, vị trí không gian của tệp trong thư mục (trong Trình tìm kiếm) và siêu dữ liệu khác. Dĩa dữ liệu (tệp thực tế) chứa dữ liệu quan trọng thực tế, vì vậy việc loại bỏ tệp AppleDouble không phải là vấn đề. – dreamlax

Trả lời

14

Thay đổi thư mục vào thư mục gốc bạn muốn (hoặc thay đổi . vào thư mục) và thực hiện:

find . -name "._*" -print0 | xargs -0 rm -rf 

xargs cho phép bạn vượt qua một vài thông số cho một lệnh duy nhất, do đó nó sẽ nhanh hơn so với sử dụng cú pháp find -exec. Ngoài ra, bạn có thể chạy điều này một lần mà không cần | để xem các tệp mà nó sẽ xóa, đảm bảo tệp đó an toàn.

+2

Điều này sẽ bị nhầm lẫn bởi tên tập tin với không gian, đó là phổ biến nếu bạn đang đối phó với các tập tin từ một môi trường Mac. Sử dụng các tùy chọn null-delimiter để 'find' và' xargs' ('find. -name" ._ * "-print0 | xargs -0 rm -rf') để tránh vấn đề này. –

+0

Vâng ... định dạng exec an toàn hơn và dễ dàng hơn nhiều. –

+0

@Gordon, cảm ơn, tôi đã cập nhật giải pháp của mình. –

2
find . -name '._*' -exec rm -Rf {} \; 
+0

Có thể muốn sử dụng '. /' Thay vì '/' – dreamlax

+0

Tác giả được yêu cầu "đi qua từng thư mục từ thư mục gốc". –

+0

Có sự khác biệt tinh tế giữa * thư mục gốc * và thư mục gốc * a *. – dreamlax

0

Tôi đã gặp sự cố tương tự một thời gian trước (tôi cho rằng bạn đang cố gắng dọn sạch ổ đĩa được kết nối với máy Mac lưu nhiều tệp này), vì vậy tôi đã viết một tập lệnh python đơn giản xóa chúng và các tệp vô dụng khác; có lẽ nó sẽ hữu ích cho bạn: ngắn

http://github.com/houbysoft/short/blob/master/tidy

+0

Yep, u giả định chính xác. Được cho là một cái gì đó táo của nó đang tìm cách để sửa chữa để làm cho máy Mac hơn 'mạng thân thiện'. – link664

0
find /path -name "._*" -exec rm -fr "{}" +; 
-3

find . -name '.*' -delete

Một chút và thực hiện tốt hơn trong trường hợp cực kỳ danh sách dài các tập tin.

+1

Noooooooo! '. *' sẽ xóa tất cả các tệp dấu chấm của bạn và bạn cần chúng !!! Đừng làm những người này. Đó là một ý tưởng tồi. – daviewales

0

Thay vì xóa các tệp AppleDouble, bạn có thể hợp nhất chúng với các tệp tương ứng. Bạn có thể sử dụng dot_clean.

dot_clean - Hợp nhất ._ * tệp với các tệp gốc tương ứng.

Đối với mỗi thư mục, dot_clean đệ quy hợp nhất tất cả các tệp ._ * với các tệp gốc tương ứng của chúng theo các quy tắc được chỉ định với các đối số đã cho. Theo mặc định, nếu có thuộc tính trên tệp gốc cũng có trong tệp ._, thuộc tính mới nhất sẽ được sử dụng.

Nếu không có toán hạng nào được cung cấp, thông báo sử dụng là đầu ra. Nếu có nhiều hơn một thư mục được đưa ra, các thư mục được hợp nhất theo thứ tự mà chúng được chỉ định.

Vì dot_clean trình đệ quy theo mặc định, sử dụng:

dot_clean <directory> 

Nếu bạn muốn tắt đệ quy sáp nhập, sử dụng -f cho merge phẳng.

dot_clean -f <directory> 
Các vấn đề liên quan