আপনি যা খুঁজছেন ঠিক তা করতে আমি কিছু রুবি স্ক্রিপ্টগুলি টুইট করেছি। এখানে রুবি কোডটি রয়েছে:
#!/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
আমি এই স্ক্রিপ্টটির নাম দিয়েছি "OnSaveFolder.rb"। এটি দুটি প্যারামিটার লাগে: আপনি যে ফোল্ডারটি পরিবর্তনগুলির জন্য দেখতে চান এবং যখন পরিবর্তন আসে তখন আপনি যে বাশ কোডটি চালাতে চান তা লাগে। উদাহরণ স্বরূপ,
ruby OnSaveFolder.rb '/home/Movies' 'echo "A movie has been changed!"'
আশা করি এটা কাজে লাগবে! আমি খুঁজে পেয়েছি যে রুবি এই ধরণের জিনিসটির জন্য খুব ভাল কাজ করে এবং এটি ডিফল্টভাবে ওএস এক্সে ইনস্টল করা হয়েছে।
fswatch
ওএস এক্সের জন্য পছন্দ করি যা আমি এমন একটি প্রশ্নের সন্ধান পেয়েছি যা নকল হিসাবে ট্যাগ করা হয়েছিল - superuser.com/questions/445907/…