В Mac OS 9 и более ранних версиях Mac мог узнать, какой тип файла у вас был, только через коды «Тип» и «Создатель». В OS X он переключился на расширения, но эти коды все еще были там (возможно, они могли переопределить настройки в начале, но теперь я думаю, что это «резервный» способ идентификации файлов).
Я просто взял файл DOC (с расширением .doc), переименовал его в «Foo» (без расширения), и Finder узнал его. Используя xattr
команду, я смог увидеть, что коды из исходного файла были скопированы в новый файл, так что Finder на моем первом Mac мог открыться.
Проверка Finder на другом Mac (синхронизируется через iCloud) и файл «Foo» - это файл UNIX. Таким образом, iCloud НЕ синхронизирует расширенные атрибуты из источника. Без расширения вам придется повторно применять коды на стороне назначения или просто добавить расширение.
Если вам повезет, вы храните файлы Word, Excel и т. Д. В отдельных папках и можете переименовывать их в пакетном режиме (см. Ниже). Если нет, вы можете запустить file
команду для каждого файла, чтобы увидеть, что это такое, а затем переименовать вручную.
Я думаю, что для пакетного переименования файлов существует множество инструментов, или вы можете использовать этот Perl-скрипт для этого. Я написал это несколько лет назад, и это хромает, но это работает для всего, что я бросил в это.
#!/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"; } }