Theo dõi thư mục OSX để thay đổi tệp, sau đó chạy tập lệnh bash [trùng lặp]


10

Có thể trùng lặp:
Xem hệ thống tệp trong thời gian thực trên OS X và Ubuntu

Tôi đang tìm kiếm một phương pháp hiệu quả để giám sát một thư mục cục bộ trong OSX và nếu có bất kỳ tệp nào bị thay đổi trong thư mục đó thì hãy chạy tập lệnh bash để cam kết các tệp thành github.

Bất kỳ công cụ đề xuất nào để theo dõi một thư mục để thay đổi tệp, sau đó kích hoạt một hành động, tức là một tập lệnh bash?


1
Câu hỏi này giống như là giới hạn một đề xuất phần mềm, thường không được phép trên Super User . Hãy thử đọc lại nó để đặt câu hỏi gốc của bạn, "Làm thế nào tôi có thể tự động thực hiện các thay đổi và đẩy từ một repo git bất cứ khi nào các tệp được thêm / xóa / thay đổi?"
Darth Android

@DarthAndroid, accd cho FAQ, câu hỏi này là tốt vì nó đứng. OP không yêu cầu tư vấn mua sắm hoặc mua hàng.
ephsmith

1
@eph OP đang yêu cầu đề xuất cho một cái gì đó, đó là ngoài chủ đề. Vấn đề chính là họ không giải thích vấn đề của họ và chỉ yêu cầu giải pháp đã cố gắng của họ.
slhck

Vấn đề rất đơn giản. Giám sát một thư mục để thay đổi và cam kết những thay đổi đó vào một kho lưu trữ. Đó là tất cả trong câu hỏi của OP. Liên kết bạn cung cấp có câu trả lời. Cuộc gọi tốt
ephsmith

Câu trả lời:


19

Sử dụng fswatch từ kho lưu trữ của bạn:

fswatch . 'git commit -avm "snapshot at ${date}"'

Ví dụ đơn giản này sẽ chỉ bắt các thay đổi đối với các tệp đã có trong kho lưu trữ.


Điều này có thể được thực hiện với các hành động thư mục được tích hợp trong OS X. Xem câu trả lời qua liên kết mà slhk cung cấp ở trên.
ephsmith

1
Bạn có thể mở rộng câu trả lời của mình bằng cách thêm một ví dụ giải thích những gì OP muốn đạt được. Chỉ cần đăng một liên kết là không khuyến khích.
slhck

Điều này có vẻ đáng khích lệ. Tôi nghĩ rằng tôi có thể chạy ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder

+1 - Tôi đã thử fswatchsau khi đọc câu trả lời của bạn. Tiện ích tuyệt vời - rất giống inotifyvới linux và nó sử dụng bản địa của OS Xfsevent
cwd

2

Một lựa chọn sẽ là chỉ sử dụng launchd. Lưu một danh sách tài sản như thế này ~/Library/LaunchAgents/com.superuser.445907.plistvà tải nó bằng launchctl load ~/Library/LaunchAgents/com.superuser.445907.plisthoặc bằng cách đăng xuất và đăng nhập lại.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.445907</string>
    <key>Program</key>
    <string>/Users/username/script</string> <!-- ~/ doesn't work -->
    <key>WatchPaths</key>
    <array>
        <string>/Users/username/Folder/</string>
    </array>
    <key>ThrotteInterval</key>
    <integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>

Launchd chỉ đăng ký thay đổi các tệp khi chúng được lưu nguyên tử, hoặc bị xóa và được tạo lại mỗi khi chúng được lưu. Hầu hết các ứng dụng OS X thực hiện lưu nguyên tử theo mặc định, nhưng ví dụ TextMate và vim thì không. Thay đổi trong các thư mục con của các thư mục đã xem không được phát hiện.

launchctl unload $path && launchctl load $path áp dụng thay đổi cho một plist.

Xem man launchdman launchd.plistđể biết thêm thông tin.


Cách tiếp cận thú vị. Tôi sẽ xem nó và lấy lại cho bạn. Cảm ơn vì bạn đã phản hồi.
Tegan Snyder

Phương pháp này chắc chắn có những hạn chế của nó. Bạn không thể phát hiện các thay đổi trong các thư mục con của các thư mục đã xem. Kỹ thuật này cũng không cho bạn biết tệp nào có sự kiện (tệp mới, sửa đổi, xóa, v.v.) - chỉ là đường dẫn có sự kiện.
Volomike
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.