{"id":13646370,"url":"https://github.com/stsquad/dired-rsync","last_synced_at":"2025-05-01T12:07:00.019Z","repository":{"id":38145348,"uuid":"127524694","full_name":"stsquad/dired-rsync","owner":"stsquad","description":"Support for rsync from Emacs dired buffers","archived":false,"fork":false,"pushed_at":"2025-03-21T20:00:26.000Z","size":106,"stargazers_count":129,"open_issues_count":11,"forks_count":16,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-05-01T12:06:54.486Z","etag":null,"topics":["emacs","emacs-packages","rsync"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stsquad.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-03-31T11:05:25.000Z","updated_at":"2025-04-24T12:21:03.000Z","dependencies_parsed_at":"2024-01-14T09:59:45.817Z","dependency_job_id":"55b3b34f-0908-4a14-b29c-27e91797172f","html_url":"https://github.com/stsquad/dired-rsync","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stsquad%2Fdired-rsync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stsquad%2Fdired-rsync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stsquad%2Fdired-rsync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stsquad%2Fdired-rsync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stsquad","download_url":"https://codeload.github.com/stsquad/dired-rsync/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251871583,"owners_count":21657473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emacs","emacs-packages","rsync"],"created_at":"2024-08-02T01:02:53.833Z","updated_at":"2025-05-01T12:06:59.987Z","avatar_url":"https://github.com/stsquad.png","language":"Emacs Lisp","readme":"#+Title: dired-rsync -- asynchronous rsync from dired\n\n[[https://stable.melpa.org/#/dired-rsync][file:https://stable.melpa.org/packages/dired-rsync-badge.svg]]\n[[https://melpa.org/#/dired-rsync][file:https://melpa.org/packages/dired-rsync-badge.svg]]\n[[https://coveralls.io/repos/github/stsquad/dired-rsync][file:https://coveralls.io/repos/github/stsquad/dired-rsync/badge.svg?branch=master]]\n\n* Introduction\n\nThis package adds the command ~dired-rsync~ which allows the user to\ncopy marked files in a ~dired~ buffer via rsync. This is useful,\nespecially for large files, because the copy happens in the background\nand doesn't lock up Emacs. It is also more efficient than using tramp's\nown encoding methods for moving data between systems.\n\nConfiguration is simple as you only need to bind the ~dired-rsync~\ncommand to your preferred ~dired~ binding.\n\n#+name: configuring-dired-rsync\n#+begin_src emacs-lisp\n(use-package dired-rsync\n  :bind (:map dired-mode-map\n              (\"C-c C-r\" . dired-rsync)))\n#+end_src\n\nA second package in this repository provides a transient version\ncalled ~dired-rsync-transient~. This wraps the command in a `magit`\nlike transient interface allowing you to tweaks the parameters for\nyour call.\n\n#+name: configuring-dired-rsync-transient\n#+begin_src emacs-lisp\n(use-package dired-rsync-transient\n  :bind (:map dired-mode-map\n              (\"C-c C-x\" . dired-rsync-transient)))\n#+end_src\n\n* Customisation\n\nA variable called ~dired-rsync-modeline-status~ is provided for mode\nlines that will report the number of active rsync operations in\nprogress. The variable ~dired-rsync-job-count~ contains the number of\ncurrently active ~dired-rsync~ jobs currently running.\n\nFor those that don't like the way ~dired-rsync~ unmarks transferred\nfiles when it completes please see ~dired-rsync-unmark-on-completion~.\n\nIf you want to tweak the way marks are collected you can customise\n~dired-rsync-source-files~ and provide your own function to return a\nlist of fully qualified names to include in the command.\n\nFrom time to time the call to rsync may fail. dired-rsync keeps the\nprocess buffer around for debugging and reports to the console. You\ncan customise ~dired-rsync-failed-hook~ with your own hook function or\nselect the more aggressive ~dired-rsync--pop-to-rsync-failed-buf~ to\npop straight to the buffer. Also you can customise ~dired-rsync-success-hook~\nwith your own hook function to provide notification for compleated transfers.\n\nThe options ~dired-rsync-command~ and ~dired-rsync-options~ are there\nto modify the call to rsync but a user is unlikely to need to tweak\nthese.\n\n* Technical Notes\n\nWhile you can use rsync to copy files locally the main use case is\ncopying files to/from a remote system. The rsync tool is always run\nlocally as rsync needs working SSH authentication to work. If you can\naccess a remote machine via tramp/ssh without having to enter a\npassword (because ssh-agent is working) then rsync should work fine.\n\nYou can also do a remote-to-remote copy although this does involve\nsetting up a port forward so the first remote can access the second\nremote. Also as dired-rsync needs to reverse ssh from your source\nlocation it is best if you fully qualify the location in tramp (i.e.\nuser@remote:/dest/path) so it can extract the correct username to\nlogin with. It's ugly but it works.\n\nThe test used by ~dired-rsync~ is ~tramp-tramp-file-p~ which will mean\nany tramp path will attempt to be converted to an rsync path with\noptional ssh transport. Obviously if your remote target doesn't also\nhave ssh running and remote rsync binary this will fail. The reporting\ncould be improved.\n\nThere have been several attempts at doing this but I found them\nwanting in usability. This attempts to clean up the ideas from:\n\n - https://truongtx.me/tmtxt-dired-async.html\n - https://oremacs.com/2016/02/24/dired-rsync/\n - https://vxlabs.com/2018/03/30/asynchronous-rsync-with-emacs-dired-and-tramp/\n\nin a hopefully cleaner and more idiomatic way.\n","funding_links":[],"categories":["Emacs Lisp"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstsquad%2Fdired-rsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstsquad%2Fdired-rsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstsquad%2Fdired-rsync/lists"}