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