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";
}
}