Dysk iCloud w systemie MacOS - pliki bez rozszerzeń nie otwierają się

0

Próbując pomóc mojemu teściu w dziwnym: nagle duży procent (może 20%) jego dokumentów iCloud Drive na jego nowym MacBooku Pro nie otworzy się. Sprawdziłem to, a problematyczne pliki wydają się być plikami, które nie mają rozszerzeń plików. Pokazują je jako pliki wykonywalne Unix, a nie pliki .doc.

Jeśli wejdę i dodasz plik .doc jako rozszerzenie pliku, plik zostanie natychmiast pobrany i otworzy się poprawnie.

Czy ktoś kiedyś to widział? Czy jest jakieś rozwiązanie inne niż ręczne zmienianie nazw setek plików pojedynczo?

dvanhook
źródło

Odpowiedzi:

0

W Mac OS 9 i wcześniejszych wersjach jedyny sposób na to, aby Mac wiedział, jaki typ pliku miałeś, to pliki „Type” i „Creator”. W systemie OS X przełączono go na rozszerzenia, ale te kody nadal istniały (być może zastąpiłyby ustawienia na początku, ale teraz myślę, że są one „rezerwowym” sposobem identyfikacji plików).

Właśnie wziąłem plik DOC (z rozszerzeniem .doc), przemianowałem go na „Foo” (bez rozszerzenia), a Finder go rozpoznał. Używając xattr mogłem zobaczyć, że kody z oryginalnego pliku zostały skopiowane do nowego pliku, więc Finder na moim pierwszym Macu mógł się otworzyć.

Sprawdzanie Findera na innym Macu (zsynchronizowanym z iCloud) i plikiem „Foo” jest plikiem UNIX. ICloud NIE synchronizuje rozszerzonych atrybutów ze źródłem. Bez rozszerzenia musisz ponownie zastosować kody po stronie docelowej lub po prostu dodać rozszerzenie.

Przy odrobinie szczęścia trzymałeś pliki Word, Excel, etc w osobnych folderach i możesz zmieniać ich nazwę w partii (patrz poniżej). Jeśli nie, możesz uruchomić file polecenie na każdym pliku, aby zobaczyć, co to jest, a następnie zmień nazwę ręcznie.

Aby wsadowo zmienić nazwy plików, myślę, że jest mnóstwo narzędzi do tego lub możesz użyć tego skryptu Perla, aby to zrobić. Napisałem to lata temu i jest kiepski, ale działa na wszystko, co na niego rzuciłem.

#!/usr/bin/perl

use strict;
use File::Copy;

if (scalar(@ARGV) < 2) {
  print "\nUSAGE: $0 <extension> <file(s)>\n\n";
  exit 1;
}

my $ext = shift;
# Strip off leading period, since we'll add it later.
$ext =~ s/^\.//;

# Everytime I pass this script's @ARGV back out to a system call
# the whole argument arrary gets treated like a long string.
# If any individual $ARGV had spaces in it, that $ARGV ends up
# looking like multiple args to the system call.
# So, parse each $ARGV one at a time, in double-quotes.
foreach my $arg (@ARGV) {
  if ($arg =~ m/\./) {
    # This $arg already has an extension!
    if ($arg =~ m/\.$ext$/) {
      # This $arg already has this $ext.  Skip it.
      warn "WARNING!  $arg already has that extension.\n";
      next;
    }
    else {
      # This $arg has an extension, but it's not the same as $ext.
      warn "WARNING!  $arg already had an extension.\n";
    }
  }
  renameFile("\$", ".$ext", $arg);
}

sub renameFile {
  my $searchString = shift;
  my $replacementString = shift;
  my $file = shift;

  if (-e "$file") {
    my $newName = $file;
    if ($newName =~ s/$searchString/$replacementString/ge) {
      if (-e "$newName") {
        print "ERROR!  Unable to move '$file' to '$newName' because\n";
        print "        a file named '$newName' already exists!\n";
      }
      else {
        print "Moving '$file' to '$newName'.\n";
        move("$file", "$newName") || die "Unable to rename '$file'.\nStopped";
      }
    }
  }
  else {
    print "File '$file' does not exist.\n";
  }
}
jimtut
źródło
Wow, to świetnie - świetna praca detektywa. Dziękuję również za skrypt. Mój teść zadzwonił do działu wsparcia Apple i okazało się, że ponownie pobrali wszystko, a dane wróciły z większością plików z iCloud. Nie wiem, dlaczego nie było go na początku, ale to chyba pytanie do Tima C. Zaznaczając to jako kompletną odpowiedź, ponieważ ten skrypt jest słodki.
dvanhook