iCloud Drive no MacOS - arquivos sem extensões não abrem

0

Tentando ajudar o meu sogro com um estranho: de repente, uma grande porcentagem (talvez 20%) de seus documentos do iCloud Drive em seu MacBook Pro muito novo não será aberta. Eu olhei para ele e os arquivos problemáticos parecem ser arquivos que não possuem extensões de arquivo. Eles são exibidos como arquivos "executáveis do Unix" em vez de arquivos .doc.

Se eu entrar e adicionar o arquivo .doc como uma extensão de arquivo, o arquivo será baixado imediatamente e será aberto corretamente.

Alguém já viu isso antes? Existe alguma solução diferente de ter que renomear manualmente centenas de arquivos, um de cada vez?

    
por dvanhook 09.04.2018 / 03:05

1 resposta

0

No Mac OS 9 e versões anteriores, a única maneira de um Mac saber que tipo de arquivo você tinha era através do arquivo "Type" e "Creator" Codes. Com o OS X, ele mudou para extensões, mas esses códigos ainda estavam lá (possivelmente poderiam substituir as configurações no início, mas agora acho que são uma maneira de "backup" para identificar arquivos).

Acabei de pegar um arquivo DOC (com extensão .doc), renomeá-lo como "Foo" (sem extensão) e o Finder o reconheceu. Usando o comando xattr , pude ver que os códigos do arquivo original foram copiados para o novo arquivo, para que o Finder no meu primeiro Mac pudesse ser aberto.

Verificar o Finder em outro Mac (sincronizado através do iCloud) e o arquivo "Foo" é um arquivo UNIX. Então, o iCloud NÃO está sincronizando os atributos estendidos da fonte. Sem uma extensão, você teria que reaplicar os códigos no lado do destino ou apenas adicionar a extensão.

Com alguma sorte, você mantém arquivos do Word, Excel, etc. em pastas separadas e pode renomear em lote (veja abaixo). Caso contrário, você pode executar o comando file em cada arquivo para ver o que é e renomear manualmente.

Para renomear arquivos em lote, acho que há toneladas de ferramentas para fazer isso, ou você pode usar esse script Perl para fazer isso. Eu escrevi isso anos atrás, e é idiota, mas funciona para tudo que eu joguei.

#!/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";
  }
}
    
por 09.04.2018 / 20:06

Tags