GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Sehen Sie sich das Dateisystem in Echtzeit auf OS X und Ubuntu an

OS X verwendet normalerweise Ordneraktionen oder Launchd für diese Aufgabe.

Das einzige plattformübergreifende Tool, das ich kenne, ist die Watchdog-API für Python (also verfügbar für OS X und Linux). Installieren Sie es über pip (oder easy_install )

pip install watchdog

Es kommt mit dem watchmedo Befehlszeilentool, mit dem Sie Shell-Befehle bei Systemereignissen ausführen können. Überprüfen Sie die allgemeine Syntax mit watchmedo --help

Hier ist ein kurzes Beispiel, wo Sie den Befehl und den fett hervorgehobenen Pfad leicht ändern könnten:

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

Dies würde einfach die Pfade zu allen geänderten Dateien oder Ordnern ausspucken, sodass Sie watchmedo weiterleiten können 's-Ausgabe an einen anderen Shell-Befehl.


Ich habe einige Ruby-Skripte, auf die ich gestoßen bin, optimiert, um genau das zu tun, wonach Sie suchen. Hier ist der Ruby-Code:

#!/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

Ich habe dieses Skript "OnSaveFolder.rb" genannt. Es benötigt zwei Parameter:den Ordner, den Sie auf Änderungen überwachen möchten, und den Bash-Code, den Sie ausführen möchten, wenn es eine Änderung gibt. Zum Beispiel

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

Ich hoffe das hilft! Ich habe festgestellt, dass Ruby für diese Art von Dingen sehr gut funktioniert und standardmäßig unter OS X installiert ist.


Sie könnten lsof eingeben in eine watch Befehl und aktualisieren Sie ihn alle <s> Sekunden:

watch -n <s> lsof

und starten Sie das mit einem beliebigen Filter, z. B. Beobachten von PID1, PID2, PID3 und Ignorieren von PID4

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

Wenn das nicht genug ist, können Sie mit grep immer noch Ihre eigenen Filter schreiben.

Für OS X siehe die Antworten zu dieser Frage.


Linux
  1. Linux-Echtzeitszenarien und Probleme mit ihren Lösungen

  2. Unterschied zwischen einem verteilten und einem Cluster-Dateisystem?

  3. Richten Sie einen Apache-vhost auf Ubuntu 20.04 und Debian 10 ein

  4. Ubuntu VM schreibgeschütztes Dateisystem behoben?

  5. Speichern Sie die Ausgabe von date und watch in einer Datei

Steuern Sie die RAM- und CPU-Nutzung durch Kodi in Echtzeit

Ubuntu 12.04.02 Dateisystem?

3 Möglichkeiten zum Ansehen von Protokollen in Echtzeit unter Linux

So überprüfen Sie die Ubuntu-Version – schnelle und einfache Methoden

Ubuntu-Tipps:So ändern Sie Datum und Uhrzeit auf Laptop oder Desktop

Wie teilt man Dateien zwischen Ubuntu und Windows 10?