✘✘ GRAYBYTE WORDPRESS FILE MANAGER ✘✘

​🇳​​🇦​​🇲​​🇪♯➤ server.blackpussy.asia ​🇻​♯➤ 5.14.0-611.20.1.el9_7.x86_64 #1 SMP 🇾​♯➤ 2026

𝗛𝗢𝗠𝗘 𝗜𝗗 ♯➤ 163.245.207.76 ♯➤ 𝗔𝗗𝗠𝗜𝗡 𝗜𝗗 216.73.216.243
𝗢𝗣𝗧𝗜𝗢𝗡𝗦 ♯ CRL ♯➤ 𝗢𝗞 ┃ WGT ♯➤ 𝗢𝗞 ┃ SDO ♯➤ 𝗢𝗞 ┃ PKEX ♯➤ 𝗢𝗙𝗙
𝗗𝗘𝗔𝗖𝗧𝗜𝗩𝗔𝗧𝗘𝗗 ♯➤ mail,mb_send_mail
𝗖𝗨𝗥𝗥𝗘𝗡𝗧 𝗙𝗜𝗟𝗘 : /usr/share/doc/rsync/support//atomic-rsync
#!/usr/bin/env python3
# This script lets you update a hierarchy of files in an atomic way by
# first creating a new hierarchy using rsync's --link-dest option, and
# then swapping the hierarchy into place.  **See the usage message for
# more details and some important caveats!**

import os, sys, re, subprocess, shutil

ALT_DEST_ARG_RE = re.compile('^--[a-z][^ =]+-dest(=|$)')

RSYNC_PROG = '/usr/bin/rsync'

def main():
    cmd_args = sys.argv[1:]
    if '--help' in cmd_args:
        usage_and_exit()

    if len(cmd_args) < 2:
        usage_and_exit(True)

    dest_dir = cmd_args[-1].rstrip('/')
    if dest_dir == '' or dest_dir.startswith('-'):
        usage_and_exit(True)

    if not os.path.isdir(dest_dir):
        die(dest_dir, "is not a directory or a symlink to a dir.\nUse --help for help.")

    bad_args = [ arg for arg in cmd_args if ALT_DEST_ARG_RE.match(arg) ]
    if bad_args:
        die("You cannot use the", ' or '.join(bad_args), "option with atomic-rsync.\nUse --help for help.")

    # We ignore exit-code 24 (file vanished) by default.
    allowed_exit_codes = '0 ' + os.environ.get('ATOMIC_RSYNC_OK_CODES', '24')
    try:
        allowed_exit_codes = set(int(num) for num in re.split(r'[, ]+', allowed_exit_codes) if num != '')
    except ValueError:
        die('Invalid integer in ATOMIC_RSYNC_OK_CODES:', allowed_exit_codes[2:])

    symlink_content = os.readlink(dest_dir) if os.path.islink(dest_dir) else None

    dest_arg = dest_dir
    dest_dir = os.path.realpath(dest_dir) # The real destination dir with all symlinks dereferenced
    if dest_dir == '/':
        die('You must not use "/" as the destination directory.\nUse --help for help.')

    old_dir = new_dir = None
    if symlink_content is not None and dest_dir.endswith(('-1','-2')):
        if not symlink_content.endswith(dest_dir[-2:]):
            die("Symlink suffix out of sync with dest_dir name:", symlink_content, 'vs', dest_dir)
        num = 3 - int(dest_dir[-1]);
        old_dir = None
        new_dir = dest_dir[:-1] + str(num)
        symlink_content = symlink_content[:-1] + str(num)
    else:
        old_dir = dest_dir + '~old~'
        new_dir = dest_dir + '~new~'

    cmd_args[-1] = new_dir + '/'

    if old_dir is not None and os.path.isdir(old_dir):
        shutil.rmtree(old_dir)
    if os.path.isdir(new_dir):
        shutil.rmtree(new_dir)

    child = subprocess.run([RSYNC_PROG, '--link-dest=' + dest_dir, *cmd_args])
    if child.returncode not in allowed_exit_codes:
        die('The rsync copy failed with code', child.returncode, exitcode=child.returncode)

    if not os.path.isdir(new_dir):
        die('The rsync copy failed to create:', new_dir)

    if old_dir is None:
        atomic_symlink(symlink_content, dest_arg)
    else:
        os.rename(dest_dir, old_dir)
        os.rename(new_dir, dest_dir)


def atomic_symlink(target, link):
    newlink = link + "~new~"
    try:
        os.unlink(newlink); # Just in case
    except OSError:
        pass
    os.symlink(target, newlink)
    os.rename(newlink, link)


def usage_and_exit(use_stderr=False):
    usage_msg = """\
Usage: atomic-rsync [RSYNC-OPTIONS] [HOST:]/SOURCE/DIR/ /DEST/DIR/
       atomic-rsync [RSYNC-OPTIONS] HOST::MOD/DIR/ /DEST/DIR/

This script lets you update a hierarchy of files in an atomic way by first
creating a new hierarchy (using hard-links to leverage the existing files),
and then swapping the new hierarchy into place.  You must be pulling files
to a local directory, and that directory must already exist.  For example:

    mkdir /local/files-1
    ln -s files-1 /local/files
    atomic-rsync -aiv host:/remote/files/ /local/files/

If /local/files is a symlink to a directory that ends in -1 or -2, the copy
will go to the alternate suffix and the symlink will be changed to point to
the new dir.  This is a fully atomic update.  If the destination is not a
symlink (or not a symlink to a *-1 or a *-2 directory), this will instead
create a directory with "~new~" suffixed, move the current directory to a
name with "~old~" suffixed, and then move the ~new~ directory to the original
destination name (this double rename is not fully atomic, but is rapid).  In
both cases, the prior destintaion directory will be preserved until the next
update, at which point it will be deleted.

By default, rsync exit-code 24 (file vanished) is allowed without halting the
atomic update.  If you want to change that, specify the environment variable
ATOMIC_RSYNC_OK_CODES with numeric values separated by spaces and/or commas.
Specify an empty string to only allow a successful copy.  An override example:

    ATOMIC_RSYNC_OK_CODES='23 24' atomic-rsync -aiv host:src/ dest/

See the errcode.h file for a list of all the exit codes.

See the "rsync" command for its list of options.  You may not use the
--link-dest, --compare-dest, or --copy-dest options (since this script
uses --link-dest to make the transfer efficient).
"""
    print(usage_msg, file=sys.stderr if use_stderr else sys.stdout)
    sys.exit(1 if use_stderr else 0)


def die(*args, exitcode=1):
    print(*args, file=sys.stderr)
    sys.exit(exitcode)


if __name__ == '__main__':
    main()

# vim: sw=4 et

Current_dir [ 𝗡𝗢𝗧 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]

Current_dir [ 𝗡𝗢𝗧 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]


[ Back ]
𝗡𝗔𝗠𝗘
𝗦𝗜𝗭𝗘
𝗟𝗔𝗦𝗧 𝗧𝗢𝗨𝗖𝗛
𝗨𝗦𝗘𝗥
𝗦𝗧𝗔𝗧𝗨𝗦
𝗙𝗨𝗡𝗖𝗧𝗜𝗢𝗡𝗦
..
--
19 Jun 2026 4.57 AM
root / root
0755
Makefile
0.078 KB
11 Jan 2005 6.37 PM
root / root
0644
atomic-rsync
5.068 KB
30 Dec 2021 8.29 PM
root / root
0644
cvs2includes
1.188 KB
17 Jun 2020 1.27 AM
root / root
0644
deny-rsync
0.981 KB
17 Jun 2020 1.27 AM
root / root
0644
file-attr-restore
4.82 KB
17 Jun 2020 1.27 AM
root / root
0644
files-to-excludes
0.525 KB
17 Jun 2020 1.27 AM
root / root
0644
git-set-file-times
3.811 KB
11 Apr 2022 3.57 PM
root / root
0644
instant-rsyncd
2.726 KB
17 Jun 2020 1.27 AM
root / root
0644
logfilter
1.078 KB
17 Jun 2020 1.27 AM
root / root
0644
lsh
3.029 KB
28 Dec 2021 1.57 AM
root / root
0644
lsh.sh
1.082 KB
9 Jan 2022 10.03 PM
root / root
0644
mapfrom
0.618 KB
17 Jun 2020 1.27 AM
root / root
0644
mapto
0.61 KB
17 Jun 2020 1.27 AM
root / root
0644
mnt-excl
1.805 KB
17 Jun 2020 1.27 AM
root / root
0644
munge-symlinks
2.556 KB
21 Dec 2021 12.41 AM
root / root
0644
nameconvert
1.491 KB
6 Aug 2020 4.32 AM
root / root
0644
rrsync
12.321 KB
10 Jan 2022 1.47 AM
root / root
0644
rrsync.1.md
4.28 KB
7 May 2022 12.42 AM
root / root
0644
rsync-no-vanished
0.579 KB
13 Nov 2021 6.39 PM
root / root
0644
rsync-slash-strip
0.751 KB
13 Nov 2021 6.39 PM
root / root
0644
rsyncstats
8.487 KB
17 Jun 2020 1.27 AM
root / root
0644
savetransfer.c
4.453 KB
18 Dec 2006 7.24 AM
root / root
0644

✘✘ GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME ✘✘
Static GIF Static GIF