The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
{syncdr} is an R package designed to facilitate the process of directory comparison and synchronization. This package provides essential tools for users who need to manage and synchronize their directories effectively.
With {syncdr}, users can:
Visualize Directory Structures: Gain a comprehensive view of directory contents, including the tree structure, common files, and files unique to each directory.
Manage Files with Ease: Perform content-based and modification date-based file comparisons, and handle tasks like identifying duplicates, copying, moving, and deleting files seamlessly within the R environment. By incorporating {syncdr} into their workflow, users can achieve a more organized and up-to-date file system, simplifying the overall management and synchronization of directories.
You can install the development version of syncdr from GitHub with:
# install.packages("devtools")
devtools::install_github("RossanaTat/syncdr")
#> Using GitHub PAT from the git credential store.
#> Downloading GitHub repo RossanaTat/syncdr@HEAD
#> joyn (0.3.0 -> e2dfd68ec...) [GitHub]
#> xfun (0.50 -> 0.54 ) [CRAN]
#> rlang (1.1.4 -> 1.1.6 ) [CRAN]
#> cli (3.6.3 -> 3.6.5 ) [CRAN]
#> Rcpp (1.0.13-1 -> 1.1.0 ) [CRAN]
#> magrittr (2.0.3 -> 2.0.4 ) [CRAN]
#> later (1.3.2 -> 1.4.4 ) [CRAN]
#> fastmap (1.1.1 -> 1.2.0 ) [CRAN]
#> digest (0.6.37 -> 0.6.39 ) [CRAN]
#> htmltools (0.5.8.1 -> 0.5.9 ) [CRAN]
#> fs (1.6.5 -> 1.6.6 ) [CRAN]
#> sass (0.4.9 -> 0.4.10 ) [CRAN]
#> mime (0.12 -> 0.13 ) [CRAN]
#> cachem (1.0.8 -> 1.1.0 ) [CRAN]
#> tinytex (0.54 -> 0.58 ) [CRAN]
#> bslib (0.8.0 -> 0.9.0 ) [CRAN]
#> evaluate (1.0.3 -> 1.0.5 ) [CRAN]
#> yaml (2.3.10 -> 2.3.12 ) [CRAN]
#> rmarkdown (2.29 -> 2.30 ) [CRAN]
#> knitr (1.49 -> 1.50 ) [CRAN]
#> collapse (569a4a513... -> 69ce87bc4...) [GitHub]
#> data.table (1.17.0 -> 1.17.8 ) [CRAN]
#> promises (1.2.1 -> 1.5.0 ) [CRAN]
#> crosstalk (1.2.1 -> 1.2.2 ) [CRAN]
#> DT (0.33 -> 0.34.0 ) [CRAN]
#> Installing 23 packages: xfun, rlang, cli, Rcpp, magrittr, later, fastmap, digest, htmltools, fs, sass, mime, cachem, tinytex, bslib, evaluate, yaml, rmarkdown, knitr, data.table, promises, crosstalk, DT
#> Installing packages into 'C:/Users/wb621604/AppData/Local/Temp/RtmpWaTr9Q/temp_libpath27ec7ad3308a'
#> (as 'lib' is unspecified)
#>
#> There are binary versions available but the source versions are later:
#> binary source needs_compilation
#> xfun 0.52 0.54 TRUE
#> rlang 1.1.5 1.1.6 TRUE
#> cli 3.6.4 3.6.5 TRUE
#> Rcpp 1.0.14 1.1.0 TRUE
#> magrittr 2.0.3 2.0.4 TRUE
#> later 1.4.1 1.4.4 TRUE
#> digest 0.6.37 0.6.39 TRUE
#> htmltools 0.5.8.1 0.5.9 TRUE
#> fs 1.6.5 1.6.6 TRUE
#> sass 0.4.9 0.4.10 TRUE
#> tinytex 0.56 0.58 FALSE
#> evaluate 1.0.3 1.0.5 FALSE
#> yaml 2.3.10 2.3.12 TRUE
#> rmarkdown 2.29 2.30 FALSE
#> data.table 1.17.0 1.17.8 TRUE
#> promises 1.3.2 1.5.0 TRUE
#> crosstalk 1.2.1 1.2.2 FALSE
#> DT 0.33 0.34.0 FALSE
#>
#> package 'fastmap' successfully unpacked and MD5 sums checked
#> package 'mime' successfully unpacked and MD5 sums checked
#> package 'cachem' successfully unpacked and MD5 sums checked
#> package 'bslib' successfully unpacked and MD5 sums checked
#> package 'knitr' successfully unpacked and MD5 sums checked
#>
#> The downloaded binary packages are in
#> C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\downloaded_packages
#> installing the source packages 'xfun', 'rlang', 'cli', 'Rcpp', 'magrittr', 'later', 'digest', 'htmltools', 'fs', 'sass', 'tinytex', 'evaluate', 'yaml', 'rmarkdown', 'data.table', 'promises', 'crosstalk', 'DT'
#> Downloading GitHub repo randrescastaneda/joyn@DEV
#> collapse (569a4a513... -> 69ce87bc4...) [GitHub]
#> Downloading GitHub repo SebKrantz/collapse@HEAD
#>
#> ── R CMD build ─────────────────────────────────────────────────────────────────
#> checking for file 'C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\remotes458068ea27ec\fastverse-collapse-69ce87b/DESCRIPTION' ... checking for file 'C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\remotes458068ea27ec\fastverse-collapse-69ce87b/DESCRIPTION' ... ✔ checking for file 'C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\remotes458068ea27ec\fastverse-collapse-69ce87b/DESCRIPTION' (660ms)
#> ─ preparing 'collapse': (19.8s)
#> checking DESCRIPTION meta-information ... checking DESCRIPTION meta-information ... ✔ checking DESCRIPTION meta-information
#> ─ cleaning src
#> ─ checking for LF line-endings in source and make files and shell scripts (974ms)
#> ─ checking for empty or unneeded directories
#> ─ building 'collapse_2.1.5.9000.tar.gz'
#>
#>
#> Installing package into 'C:/Users/wb621604/AppData/Local/Temp/RtmpWaTr9Q/temp_libpath27ec7ad3308a'
#> (as 'lib' is unspecified)
#> ── R CMD build ─────────────────────────────────────────────────────────────────
#> checking for file 'C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\remotes458027d42e3f\randrescastaneda-joyn-e2dfd68/DESCRIPTION' ... checking for file 'C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\remotes458027d42e3f\randrescastaneda-joyn-e2dfd68/DESCRIPTION' ... ✔ checking for file 'C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\remotes458027d42e3f\randrescastaneda-joyn-e2dfd68/DESCRIPTION' (585ms)
#> ─ preparing 'joyn': (9s)
#> checking DESCRIPTION meta-information ... checking DESCRIPTION meta-information ... ✔ checking DESCRIPTION meta-information
#> ─ checking for LF line-endings in source and make files and shell scripts (440ms)
#> ─ checking for empty or unneeded directories
#> Removed empty directory Removed empty directory 'joyn/inst/tmp'
#> ─ building 'joyn_0.3.0.tar.gz'
#>
#>
#> Installing package into 'C:/Users/wb621604/AppData/Local/Temp/RtmpWaTr9Q/temp_libpath27ec7ad3308a'
#> (as 'lib' is unspecified)
#> Skipping install of 'collapse' from a github remote, the SHA1 (69ce87bc) has not changed since last install.
#> Use `force = TRUE` to force installation
#> ── R CMD build ─────────────────────────────────────────────────────────────────
#> checking for file 'C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\remotes458038992106\RossanaTat-syncdr-62ce8df/DESCRIPTION' ... checking for file 'C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\remotes458038992106\RossanaTat-syncdr-62ce8df/DESCRIPTION' ... ✔ checking for file 'C:\Users\wb621604\AppData\Local\Temp\Rtmp6vU5MR\remotes458038992106\RossanaTat-syncdr-62ce8df/DESCRIPTION' (748ms)
#> ─ preparing 'syncdr': (21.3s)
#> checking DESCRIPTION meta-information ... checking DESCRIPTION meta-information ... ✔ checking DESCRIPTION meta-information
#> ─ checking for LF line-endings in source and make files and shell scripts (606ms)
#> ─ checking for empty or unneeded directories
#> Omitted 'LazyData' from DESCRIPTION
#> ─ building 'syncdr_0.0.2.9001.tar.gz'
#>
#>
#> Installing package into 'C:/Users/wb621604/AppData/Local/Temp/RtmpWaTr9Q/temp_libpath27ec7ad3308a'
#> (as 'lib' is unspecified)
library(syncdr)
# Generate toy directories to show package usage
# --- Create .syncdrenv --- #
.syncdrenv <- toy_dirs()
#> ■■■■■■■ 20% | ETA: 8s■■■■■■■■■■■■■■■ 47% | ETA: 5s■■■■■■■■■■■■■■■■■ 53% | ETA:
#> 5s■■■■■■■■■■■■■■■■■■■ 60% | ETA: 4s■■■■■■■■■■■■■■■■■■■■■■■■■■■ 87% | ETA: 1s
left <- .syncdrenv$left
right <- .syncdrenv$right
# --- Compare synchronization status of the two directories --- #
display_dir_tree(path_left = left,
path_right = right)
#> (←)Left directory structure:
#> C:/Users/wb621604/AppData/Local/Temp/Rtmp6vU5MR/left
#> ├── A
#> │ ├── A1.Rds
#> │ ├── A2.Rds
#> │ └── A3.Rds
#> ├── B
#> │ ├── B1.Rds
#> │ ├── B2.Rds
#> │ └── B3.Rds
#> ├── C
#> │ ├── C1.Rds
#> │ ├── C2.Rds
#> │ └── C3.Rds
#> ├── D
#> │ ├── D1.Rds
#> │ └── D2.Rds
#> └── E
#> (→)Right directory structure:
#> C:/Users/wb621604/AppData/Local/Temp/Rtmp6vU5MR/right
#> ├── A
#> ├── B
#> │ ├── B1.Rds
#> │ └── B2.Rds
#> ├── C
#> │ ├── C1.Rds
#> │ ├── C1_duplicate.Rds
#> │ ├── C2.Rds
#> │ └── C3.Rds
#> ├── D
#> │ ├── D1.Rds
#> │ ├── D2.Rds
#> │ └── D3.Rds
#> └── E
#> ├── E1.Rds
#> ├── E2.Rds
#> └── E3.Rds
# comparing by date of last modification
compare_directories(left_path = left,
right_path = right)
#>
#> ── Synchronization Summary ─────────────────────────────────────────────────────
#> • Left Directory: 'C:/Users/wb621604/AppData/Local/Temp/Rtmp6vU5MR/left'
#> • Right Directory: 'C:/Users/wb621604/AppData/Local/Temp/Rtmp6vU5MR/right'
#> • Total Common Files: 7
#> • Total Non-common Files: 9
#> • Compare files by: date
#>
#> ── Common files ────────────────────────────────────────────────────────────────
#> path modification_time_left modification_time_right modified
#> 1 /left/B/B1.Rds 2025-12-11 11:00:54 2025-12-11 11:00:55 right
#> 2 /left/B/B2.Rds 2025-12-11 11:00:57 2025-12-11 11:00:58 right
#> 3 /left/C/C1.Rds 2025-12-11 11:00:55 2025-12-11 11:00:55 same date
#> 4 /left/C/C2.Rds 2025-12-11 11:00:58 2025-12-11 11:00:59 right
#> 5 /left/C/C3.Rds 2025-12-11 11:01:00 2025-12-11 11:01:01 right
#> 6 /left/D/D1.Rds 2025-12-11 11:00:57 2025-12-11 11:00:56 left
#> 7 /left/D/D2.Rds 2025-12-11 11:01:00 2025-12-11 11:00:59 left
#>
#> ── Non-common files ────────────────────────────────────────────────────────────
#>
#> ── Only in left ──
#> # A tibble: 4 × 1
#> path_left
#> <fs::path>
#> 1 /left/A/A1.Rds
#> 2 /left/A/A2.Rds
#> 3 /left/A/A3.Rds
#> 4 /left/B/B3.Rds
#> ── Only in right ──
#> # A tibble: 5 × 1
#> path_right
#> <fs::path>
#> 1 /right/C/C1_duplicate.Rds
#> 2 /right/D/D3.Rds
#> 3 /right/E/E1.Rds
#> 4 /right/E/E2.Rds
#> 5 /right/E/E3.Rds
# --- Perform synchronization action --- #
# asymmetric snchronization from left to right
full_asym_sync_to_right(left_path = left,
right_path = right,
force = FALSE)
#> These files will be DELETED in right
#>
#> |Files |Action |
#> |:-------------------|:-------------|
#> |/C/C1_duplicate.Rds |To be deleted |
#> |/D/D3.Rds |To be deleted |
#> |/E/E1.Rds |To be deleted |
#> |/E/E2.Rds |To be deleted |
#> |/E/E3.Rds |To be deleted |
#> These files will be COPIED (overwriting if present) to right
#>
#>
#> |Files |Action |
#> |:---------|:------------|
#> |/D/D1.Rds |To be copied |
#> |/D/D2.Rds |To be copied |
#> |/A/A1.Rds |To be copied |
#> |/A/A2.Rds |To be copied |
#> |/A/A3.Rds |To be copied |
#> |/B/B3.Rds |To be copied |
#> Do you want to proceed? Type your answer (Yes/no/cancel)
#> ✔ synchronizedThese binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.