Posted to tcl by zmoment at Wed Dec 24 12:42:11 GMT 2025view raw
- #!/usr/bin/env tclsh
- #
- # Compare media files in this and other directory.
- # Media files in both directories should have name that begins with 20251130_1200 and ends in .mp4
- # Get all media files of this directory.
- set remote_dir /partilha_casa/FOTOS/sem_duplicados
- #set remote_dir ../teste\ 2
- set remote_dir /home/lupe/Sync/fotos_teste_script_remote
- #set new_dir ../teste1
- set new_dir /home/lupe/Sync/fotos_teste_script
- set patterns "*.jpg *.mp4"
- proc rglob { dirpath patterns {exclude_pats {}} } {
- set rlist {}
- set f_exclude [glob -nocomplain -types f -directory ${dirpath} {*}${exclude_pats}]
- #puts "f_exclude: $f_exclude"
- set d_exclude [glob -nocomplain -types d -directory ${dirpath} {*}${exclude_pats}]
- #puts "d_exclude: $d_exclude"
- foreach fpath [glob -nocomplain -types f -directory ${dirpath} {*}${patterns}] {
- if { ${fpath} ni ${f_exclude} } {
- lappend rlist ${fpath}
- }
- }
- foreach dir [glob -nocomplain -types d -directory ${dirpath} *] {
- if { ${dir} ni ${d_exclude} } {
- lappend rlist {*}[rglob ${dir} ${patterns} ${exclude_pats}]
- }
- }
- return ${rlist}
- }
- proc getFiles {dir patterns} {
- set d [dict create]
- set patterns_lst [split $patterns]
- foreach p $patterns_lst {
- set files_in_dir [rglob $dir $p]
- puts "files_in_dir $files_in_dir"
- #set files_in_dir [glob -directory $dir -types f -nocomplain $p]
- foreach f $files_in_dir {
- puts "f: $f [file size $f]"
- set dt [string range [file tail $f] 0 14]
- dict set d $dt [list name $f size [file size $f]]
- }
- }
- return $d
- }
- set n_files [getFiles $new_dir $patterns]
- #puts "n_files: $n_files"
- #set r_files [glob -directory $remote_dir -types f -nocomplain *.jpg]
- set r_files [getFiles $remote_dir $patterns]
- #puts $r_files
- set messages_deleted [list]
- set messages_problem [list]
- set messages_size_differ [list]
- dict for {dt d} $n_files {
- if {[dict exists $r_files $dt]} {
- set size_diff [expr {[dict get $n_files $dt size] - [dict get $r_files $dt size]}]
- set same_size [expr {$size_diff == 0 ? "same size" : "size differs by (bytes): $size_diff"}]
- if {$size_diff == 0} {
- file delete [dict get $n_files $dt name]
- if {! [file exists [dict get $n_files $dt name]]} {
- lappend messages_deleted "Repeated? [dict get $n_files $dt name] [dict get $r_files $dt name] $same_size DELETED."
- } else {
- lappend messages_problem "Repeated? [dict get $n_files $dt name] [dict get $r_files $dt name] $same_size PROBLEM, NOT DELETED."
- }
- } else {
- set extension [string range [dict get $n_files $dt name] end-2 end]
- if {$extension eq "jpg"} {
- exec viewnior [dict get $n_files $dt name] &
- exec viewnior [dict get $r_files $dt name] &
- } elseif {$extension eq "mp4"} {
- exec ffplay -autoexit -loglevel quiet -left 50 -top 400 -t 10 -x 800 -y 600 [dict get $n_files $dt name] &
- exec ffplay -autoexit -loglevel quiet -left 900 -top 400 -t 10 -x 800 -y 600 [dict get $r_files $dt name] &
- }
- puts "Delete file [dict get $n_files $dt name]? - press y or Y for yes, other key for no."
- set k [gets stdin]
- if {$k eq "y" || $k eq "Y"} {
- file delete [dict get $n_files $dt name]
- if {! [file exists [dict get $n_files $dt name]]} {
- lappend messages_deleted "Repeated? [dict get $n_files $dt name] [dict get $r_files $dt name] $same_size DELETED."
- continue
- } else {
- lappend messages_problem "Repeated? [dict get $n_files $dt name] [dict get $r_files $dt name] $same_size PROBLEM, NOT DELETED."
- continue
- }
- } else {
- lappend messages_size_differ "Repeated? [dict get $n_files $dt name] [dict get $r_files $dt name] $same_size SIZE DIFFERS BUT NOT DELETED."
- }
- }
- }
- }
- puts "\n\nFinal report DELETED ([llength $messages_deleted] files):"
- foreach m $messages_deleted {
- puts $m
- }
- puts "\n\nFinal report PROBLEM COULD NOT BE DELETED ([llength $messages_problem] files):"
- foreach m $messages_problem {
- puts $m
- }
- puts "\n\nFinal report NOT DELETED, SIZE DIFFERS ([llength $messages_size_differ] files):"
- foreach m $messages_size_differ {
- puts $m
- }
Add a comment