Có lệnh Linux dựng sẵn nào để hiển thị nội dung của một thư mục trong thời gian thực không?


8

Có lệnh Linux dựng sẵn nào để hiển thị nội dung của một thư mục trong thời gian thực không? Tương tự như lệnh "tail -f file_name" hiển thị nội dung của tệp trong thời gian thực.


4
Thế cònwatch -n1 ls
Joe

Hãy xem đồng hồ ( linfo.org/watch.html )
David

4
Không hoàn toàn tích hợp, nhưng inotifytoolsgói sử dụng inotifytính năng của Linux để cho phép xem các sự kiện tạo tệp khi chúng xảy ra.
chepner

Câu trả lời:


6

bạn có thể làm điều này bằng cách sử dụng watch. Nó không hoàn toàn theo thời gian thực, nhưng đủ gần (tối đa một phần mười giây):

watch -n0.1 ls

từ hướng dẫn:

-n, --interval seconds
          Specify update interval.  The command will not allow quicker than 0.1 second interval, in which the smaller values are converted.

1
Nếu bạn muốn xem các tệp mới rõ hơn, hãy sử dụng ls -ltđể xem các tệp mới ở đầu danh sách hoặc ls -ltrđể xem các tệp mới ở cuối. Sau đó, để làm nổi bật các tệp mới đó, hãy sử dụng watch -dđể làm nổi bật các thay đổi trong bản cập nhật mới nhất hoặc watch --differences=cumulativeđể làm nổi bật tất cả các thay đổi kể từ khi watchđược bắt đầu.
garyjohn

@ jm666 - watch tail lshoặc watch head lssẽ hiển thị các tệp mới nhất với các tùy chọn đặt hàng ls chính xác , chẳng hạn như -lt với đầu hoặc -ltrđuôi .
AFH

@ jm666 - Tất nhiên là vô nghĩa nếu được hiểu theo nghĩa đen: Tôi đã sử dụng nó như một cách viết tắt chowatch {options} 'ls {options} | tail {options}'
AFH

@ jm666: Yêu cầu là một lệnh theo sau các thay đổi đối với thư mục như tail -fsau các thay đổi đối với tệp. Lệnh ban đầu của bạn là watchđã không làm điều đó rất tốt. Tôi nghĩ rằng nó sẽ, nếu lệnh nó chạy được chế tạo phù hợp. Đôi khi bạn phải sử dụng sh -cđể bọc một lệnh phức tạp hơn. Tôi đã xem xét các công cụ inotify một cách nhanh chóng và không thấy một lệnh nào sẽ hiển thị các thay đổi cho một thư mục, không chỉ các sự kiện được áp dụng cho một thư mục.
garyjohn

2

Tôi đã viết điều này, tôi hy vọng đây là những gì bạn cần. Nó không phải là một built-in Linux command, nhưng nó chỉ sử dụng các chương trình phổ biến có trong hầu hết các hộp UNIX.

Điều chỉnh sleepthời gian khi cần thiết. Tôi sẽ sử dụng giá trị ít nhất là 2 giây. Sử dụng cmd="ls"cho cấu trúc không đệ quy hoặc cmd="find DIRNAME"để tìm kiếm đệ quy. Lưu ý rằng trong trường hợp cuối cùng, bạn sẽ nhận được DIRNAME/tiền tố cho tất cả các tệp và thư mục.

 echo "" | awk '{while ( 1 ) {cmd="find ."; delete b;c=0; while ( ( cmd | getline result ) > 0 ) {test=1;c++;n=0;for (i in a) {n++;if (a[i]==result) {b[c]=i; test=0; break;}} if (test) {n++;a[n]=result;b[c]=n;print "##NEW## "result }} close (cmd); for (i in a) {test=1;for (j in b) {if (b[j]==i) {test=0;break}} if (test) {print "##DELETED## "a[i]; delete a[i]}} system("sleep 5") } }'

Đã tìm thấy một lỗi làm imất giá trị sau khi thực hiện một vòng lặp khiến tập lệnh hiển thị mọi thứ như mới mỗi lần trên một số máy linux
NuTTyX

1

Điều này rất đơn giản sau khi tôi biết nó.

watch -d dir_name

0

Bạn có thể sử dụng inotifytoolsvà các tiện ích dòng lệnh của nó.

Bạn có thể sử dụng inotifyđể theo dõi thư mục và nó sẽ trả về các sự kiện cho chính thư mục đó và cho các tệp bên trong thư mục.

Một công cụ khác có thể được sử dụng là inotifywatch:

sudo inotifywatch -v -r /foo

Bạn có thể thêm -rđể xem tất cả các thư mục con theo cách đệ quy. Tuy nhiên, giải pháp này không phát hiện ra các thay đổi trên các tệp mới được tạo .

Vì vậy, một giải pháp khác là sử dụng inotifywait:

inotifywait -m --format "%f" /foo

Đây là một ví dụ khác về hiển thị nội dung của tất cả test*các tệp mới được tạo trong /tmp:

inotifywait -m --format "%f" /tmp | grep --line-buffered ^test | xargs -L1 -I% sudo cat /tmp/% 2> /dev/null
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.