{"id":21443,"date":"2018-05-07T16:41:12","date_gmt":"2018-05-07T20:41:12","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=21443"},"modified":"2025-07-03T18:45:25","modified_gmt":"2025-07-03T22:45:25","slug":"icloud-drive-breaks-the-macos-command-line","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2018\/05\/07\/icloud-drive-breaks-the-macos-command-line\/","title":{"rendered":"iCloud Drive Breaks the macOS Command Line"},"content":{"rendered":"<p><a href=\"https:\/\/eclecticlight.co\/2018\/05\/06\/last-week-on-my-mac-is-the-macos-command-line-doomed\/\">Howard Oakley<\/a>:<\/p>\n<blockquote cite=\"https:\/\/eclecticlight.co\/2018\/05\/06\/last-week-on-my-mac-is-the-macos-command-line-doomed\/\">\n<p>Apple&rsquo;s current engineering solution breaks consistency of file names and paths. When a file has been evicted from local storage, and only exists in full in iCloud storage, the local stub file uses the previous name prefixed with a stop\/period, and gains the extension of .icloud. When that file is downloaded to local storage &#x2013; something which can be triggered by all sorts of events &#x2013; the leading stop\/period and the extension are stripped.<\/p>\n<p>[&#8230;]<\/p>\n<p>Many commands and scripts can safely ignore files which the user has placed in their iCloud Drive. But the moment that a user enables <strong>Desktop &amp; Document Folders<\/strong> to be stored in iCloud, with <strong>Optimize Mac Storage<\/strong> enabled, file names in ~\/Documents are affected, and commands and scripts will fail when run on one of the most important and active directories on most macOS systems.<\/p>\n<p>[&#8230;]<\/p>\n<p>Apple&rsquo;s own most robust tool for locating files, the Finder alias, is broken by iCloud.<\/p>\n<p>[&#8230;]<\/p>\n<p>Inevitably, all hard and symbolic links made to evicted files are also broken by their eviction.<\/p>\n<p>Faced with the problems posed by iCloud, a lot of commands, shell scripts and other scripting becomes inordinately complex, and in some cases impossible. Apple needs to continue to evolve the iCloud interface, making it consistent with the fundamental needs of commands and shell scripts. If it doesn&rsquo;t, but continues to converge with iOS, it will undermine macOS itself.<\/p>\n<\/blockquote>\n\n<p>Update (2018-05-10): See also: <a href=\"https:\/\/www.macintouch.com\/community\/index.php?threads\/icloud-issues.721\/\">MacInTouch<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Howard Oakley: Apple&rsquo;s current engineering solution breaks consistency of file names and paths. When a file has been evicted from local storage, and only exists in full in iCloud storage, the local stub file uses the previous name prefixed with a stop\/period, and gains the extension of .icloud. When that file is downloaded to local [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2018-05-10T20:42:19Z","apple_news_api_id":"4d75fe11-770c-4fcf-8ffd-76c401494d1c","apple_news_api_modified_at":"2025-07-03T22:45:27Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAQ==","apple_news_api_share_url":"https:\/\/apple.news\/ATXX-EXcMT8-P_XbEAUlNHA","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[2],"tags":[2786,131,1408,16,913,30,1529,318],"class_list":["post-21443","post","type-post","status-publish","format-standard","hentry","category-technology","tag-aliases","tag-bug","tag-hard-links","tag-icloud","tag-icloud-drive","tag-mac","tag-macos-10-13","tag-terminal"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/21443","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=21443"}],"version-history":[{"count":2,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/21443\/revisions"}],"predecessor-version":[{"id":21482,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/21443\/revisions\/21482"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=21443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=21443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=21443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}