GNU/Linux >> Belajar Linux >  >> Linux

Tonton Filesystem secara Real Time di OS X dan Ubuntu

OS X biasanya akan menggunakan Tindakan Folder atau Luncurkan untuk tugas ini.

Satu-satunya alat lintas platform yang saya tahu adalah API pengawas untuk Python (sehingga tersedia untuk OS X dan Linux). Instal melalui pip (atau easy_install )

pip install watchdog

Muncul dengan watchmedo alat baris perintah, yang memungkinkan Anda menjalankan perintah shell pada peristiwa sistem. Periksa sintaks umumnya dengan watchmedo --help

Berikut adalah contoh singkat, di mana Anda dapat dengan mudah memodifikasi perintah dan jalur yang disorot dengan huruf tebal:

watchmedo shell-command \
    --recursive \
    --command='echo "${watch_src_path}"' \
    /some/folder

Ini hanya akan memuntahkan jalur ke semua file atau folder yang diubah, memungkinkan Anda untuk mem-pipe watchmedo output ke perintah shell lain.


Saya telah men-tweak beberapa skrip Ruby yang saya temukan untuk melakukan apa yang Anda cari. Berikut kode Ruby:

#!/usr/bin/ruby
# Inspired by http://vikhyat.net/code/snippets/#watchfile

# How to use:
# This script takes two paramaters:  a folder and a shell command
# The script watches for when files in the folder are changed.  When they are, the shell command executes
# Here are some shortcuts you can put in the shell script:
# %F = filename (with extension)
# %B = base filename (without extension)


unless ARGV.length == 2
  puts "\e[32m    Usage: \e[0mruby OnSaveFolder.rb 'folder' 'command'"
  exit
end

require 'digest/md5'
require 'ftools'

$md5 = ''
$directory = File.expand_path(ARGV[0])
$contents = `ls #{$directory}`
$contentsList = $contents.split("\n")
$fileList = []


Dir.chdir($directory)

for i in $contentsList
  if ( File.file?(File.expand_path(i)) == true)
    $fileList.push(i)
  end
end

$processes = []

def watch(file, timeout, &cb)
  $md5 = Digest::MD5.hexdigest(File.read(file))
  loop do
    sleep timeout
    if ( temp = Digest::MD5.hexdigest(File.read(file)) ) != $md5
      $md5 = temp
      cb.call(file)
    end
  end
end

puts "\e[31m Watching files in folder \e[34m #{$directory}"
puts "\e[32m    Press Control+C to stop \e[0m"

for i in $fileList
  pid = fork do
    $num = 0
    $filePath = File.expand_path(i)

    watch i, 1 do |file|
      puts "\n     #{i} saved"

      $command = ARGV[1].dup
      if ( ARGV[1].include?('%F') )
        $command = $command.gsub!('%F', i)
      end
      if ( ARGV[1].include?('%B') )
        $command = $command.gsub!('%B', File.basename(i, '.*'))
      end

      $output = `#{$command}`
      if ( $output != '')
        puts "\e[34m     #{$command}\e[31m output: \e[0m"
        puts $output
      end
      puts "\e[34m     #{$command}\e[31m finished \e[0m (#{$num}, #{Time.now})\n"
      $num += 1

    end
  end
  $processes.push(pid)
end

Process.wait(pid)

for i in $processes
  `kill #{i}`
end

Saya menamai skrip ini "OnSaveFolder.rb". Dibutuhkan dua parameter:folder yang ingin Anda amati perubahannya, dan kode bash yang ingin Anda jalankan saat ada perubahan. Misalnya,

ruby OnSaveFolder.rb '/home/Movies' 'echo "A movie has been changed!"'

Semoga membantu! Saya menemukan bahwa ruby ​​​​berfungsi sangat baik untuk hal semacam ini, dan ruby ​​terinstal di OS X secara default.


Anda bisa memasukkan lsof menjadi watch perintah dan perbarui setiap <s> detik:

watch -n <s> lsof

dan luncurkan dengan filter apa pun, seperti menonton pid1, pid2, pid3 dan mengabaikan pid4

lsof -p "pid1,pid2,pid3,^pid4"

Jika itu tidak cukup, Anda selalu dapat menulis filter Anda sendiri dengan grep.

Untuk OS X, lihat jawaban pertanyaan ini.


Linux
  1. Output Ke Stdout Dan Pada Saat Yang Sama Grep Ke File?

  2. Buat dan hapus file swap di Ubuntu

  3. cap waktu, waktu modifikasi, dan waktu pembuatan file

  1. Perbedaan Antara Sistem File Terdistribusi dan Cluster?

  2. Bagaimana Cara Membuat File Dan Memasangnya Sebagai Sistem File?

  3. cadangan waktu nyata jika file diubah?

  1. Skenario Waktu Nyata Linux dan masalah dengan solusinya

  2. Siapkan vhost Apache di Ubuntu 20.04 dan Debian 10

  3. Perbaikan sistem file hanya baca VM Ubuntu?