As we all know, file copying on Linux has long relied on the classic cp command, which remains reliable but offers little feedback and limited control over long or complex operations.

To address this, a promising new Rust-based command-line tool called cpx emerge, designed as an alternative rather than a replacement, that approaches the same task with a focus on performance, visibility, and configurability.

It targets scenarios where large directory trees, interrupted transfers, or the need for detailed progress reporting make standard tools less convenient to use. The project is currently Linux-only and leverages modern kernel features to improve copy throughput and reliability.

    • onlinepersona@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      4 months ago

      It’s a damn pain to remember all the flags. How many flags can a program friggin have? I’m always afraid that some flag I enter will reverse the sync and delete everything in the source folder because the target is empty.

      I use rsync only when all params have been reseasrched and tested. cpx presumably just requires cpx - r source target instead of 5 rsync flags.

      • frongt@lemmy.zip
        link
        fedilink
        arrow-up
        0
        ·
        edit-2
        4 months ago

        The only one you need is -a. -avz if you want verbose and compression.

        • onlinepersona@programming.dev
          link
          fedilink
          arrow-up
          0
          ·
          4 months ago

          I just looked it up and - x means one filesystem. But does - v give you a progress bar or just a lost of stuff copied?

          IIRC rsync also treats the trailing slash in a special manner that I always have to look up.

          • cyrl@lemmy.world
            link
            fedilink
            arrow-up
            1
            ·
            4 months ago

            The trailing slash is just following cp’s own special treatment

            
            # before
            dir/
                file1
            target/
                orig.txt
            
            
            
            # no trailing slash - copy *dir* to target
            cp -r /path/to/some/dir /my/target
            
            # after
            target/
                orig.txt
                dir/            # dir copied to target
                    file1
            
            
            
            # with trailing slash - copy *contents* of dir to target
            cp -r /path/to/some/dir/ /my/target
            
            # after
            target/
                orig.txt
                file1            # contents of dir