delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2022/06/14/07:25:53

X-Recipient: archive-cygwin AT delorie DOT com
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 215C338582A5
Authentication-Results: sourceware.org;
dmarc=none (p=none dis=none) header.from=dinwoodie.org
Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=dinwoodie.org
Date: Tue, 14 Jun 2022 12:25:32 +0100
From: Adam Dinwoodie <adam AT dinwoodie DOT org>
To: cygwin AT cygwin DOT com
Subject: Wish list: Cygwin `mv` to move OneDrive files without downloading them
Message-ID: <20220614112532.7hgkmwm5boz7rqre@lucy.dinwoodie.org>
MIME-Version: 1.0
X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS,
SPF_HELO_NONE, SPF_PASS, TXREP,
T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on
server2.sourceware.org
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.29
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
Sender: "Cygwin" <cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com>

Microsoft OneDrive has a "Files On-Demand" function, where it will
synchronise file metadata to a local system, but won't actually download
the file content until an application attempts to read the content.
When moving a file within Cygwin using `mv`, the file always gets
downloaded, which seems like it shouldn't be necessary.  Is there any
way to have `mv` (and presumably the underlying rename call) work
without downloading the file content in this circumstance?  It'd
definitely make some of my life easier, but I'm not sure if it's a
trivial issue, one that would require years of work, or somwhere in
between...

As best I can tell, `mv` doesn't need to know the content of the file,
at least as long as it's not moving the file outside of OneDrive; it
feels very similar to me to moving a file within a partition on *nix:
generally it's just a case of updating the directory records, with no
need to look at the file content.

This does work as desired from within PowerShell: PowerShell's
`Move-Item` won't download a file that's not currently stored on the
local system.  So it's presumably possible to achieve this, although I
don't know if it'd rely on non-public Microsoft APIs, and/or lots more
complexity in the Cygwin code.

Simple demonstration below, showing the different behaviours of
PowerShell versus Cygwin.  I've not included a cygcheck.out, as I'm
pretty sure this is much closer to a feature request than a problem
report, but let me know if I've got that wrong.

    PS C:\Users\adinwoodie\OneDrive> # Create a directory and some files to experiment with
    PS C:\Users\adinwoodie\OneDrive> New-Item -Type directory -Name temp


        Directory: C:\Users\adinwoodie\OneDrive


    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    d-----        14/06/2022     12:09                temp


    PS C:\Users\adinwoodie\OneDrive> cd temp
    PS C:\Users\adinwoodie\OneDrive\temp> New-Item -Type file -Name move-with-pwsh -Value "Some arbitrary file content"


        Directory: C:\Users\adinwoodie\OneDrive\temp


    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a----        14/06/2022     12:10             27 move-with-pwsh


    PS C:\Users\adinwoodie\OneDrive\temp> New-Item -Type file -Name move-with-cygwin -Value "Some arbitrary file content"


        Directory: C:\Users\adinwoodie\OneDrive\temp


    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a----        14/06/2022     12:10             27 move-with-cygwin


    PS C:\Users\adinwoodie\OneDrive\temp> # Look at the directory listing prior to recovering the disk space
    PS C:\Users\adinwoodie\OneDrive\temp> dir


        Directory: C:\Users\adinwoodie\OneDrive\temp


    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---l        14/06/2022     12:10             27 move-with-cygwin
    -a---l        14/06/2022     12:10             27 move-with-pwsh


    PS C:\Users\adinwoodie\OneDrive\temp> # Mark the files as to be stored online and the local disk space to be recovered
    PS C:\Users\adinwoodie\OneDrive\temp> attrib.exe +O +U *
    PS C:\Users\adinwoodie\OneDrive\temp> # Check the disk space is now marked as recovered; note the brackets around the file length
    PS C:\Users\adinwoodie\OneDrive\temp> dir


        Directory: C:\Users\adinwoodie\OneDrive\temp


    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---l        14/06/2022     12:10           (27) move-with-cygwin
    -a---l        14/06/2022     12:10           (27) move-with-pwsh


    PS C:\Users\adinwoodie\OneDrive\temp> # Move the files
    PS C:\Users\adinwoodie\OneDrive\temp> Move-Item move-with-pwsh moved-with-pwsh
    PS C:\Users\adinwoodie\OneDrive\temp> C:\cygwin64\bin\mv.exe move-with-cygwin moved-with-cygwin
    PS C:\Users\adinwoodie\OneDrive\temp> # Note the version moved with Cygwin is now consuming local disk space again, while the version moved with PowerShell doesn't
    PS C:\Users\adinwoodie\OneDrive\temp> dir


        Directory: C:\Users\adinwoodie\OneDrive\temp


    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---l        14/06/2022     12:10             27 moved-with-cygwin
    -a---l        14/06/2022     12:10           (27) moved-with-pwsh

-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019