From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dalaran.tastycake.net (dalaran.tastycake.net [IPv6:2001:ba8:0:1c0::1:1]) by sourceware.org (Postfix) with ESMTPS id 215C338582A5 for ; Tue, 14 Jun 2022 11:25:35 +0000 (GMT) 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 Received: from 77.116.2.81.in-addr.arpa ([81.2.116.77] helo=lucy.dinwoodie.org) by dalaran.tastycake.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o14ft-0004Im-E8 for cygwin@cygwin.com; Tue, 14 Jun 2022 12:25:33 +0100 Received: from adam by lucy.dinwoodie.org with local (Exim 4.94.2) (envelope-from ) id 1o14fs-001VSf-Mj for cygwin@cygwin.com; Tue, 14 Jun 2022 12:25:32 +0100 Date: Tue, 14 Jun 2022 12:25:32 +0100 From: Adam Dinwoodie To: cygwin@cygwin.com Subject: Wish list: Cygwin `mv` to move OneDrive files without downloading them Message-ID: <20220614112532.7hgkmwm5boz7rqre@lucy.dinwoodie.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jun 2022 11:25:37 -0000 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