Як додати розширення до багатьох файлів, використовуючи вміст кожного файлу?


2

У мене понад 10 000 файлів, які не мають розширень із старих версій Mac OS. Вони надзвичайно вкладені у структуру файлів, у них також є всілякі дивні формати та символи. У них більше не додаються типи файлів або коди творців. Багато файлів мають текст у файлі, який дозволить мені визначати розширення (наприклад, Word.Document.8 - це текст кожного файлу, створеного цією версією Word).

Я знайшов сценарій, схожий на те, що він одночасно буде працювати для одного з цих типів файлів, але він стирає частини імен файлів після нечесних символів, що не годиться.

find . -type f -not -name "*.*" -print0 |\
    xargs -0 file |\
    grep  'Word.Document.8' |\
    sed 's/:.*//' |\
    xargs -I % echo mv % %.doc

Чи потрібно спочатку очистити символів у файлах файлів або програмово розправитись із тими, що в сценарії, щоб залишити їх однаковими? Поки я не втрачаю інформації з назви файлів, я не бачу проблеми з очищенням косої риски та інших проблемних символів. Крім того, якщо я очищую імена файлів, ймовірно, будуть дублікати, тому будь-який сценарій очищення повинен буде додати щось на зразок "-1" перед розширенням, щоб переконатися, що нічого не загубиться.

Я не прив’язаний до цього сценарію, але це зрозуміло, що є профі. Mac OS X 10.6 встановлений на цьому файловому сервері, але я отримав доступ до будь-яких останніх версій OS X.


Ви говорите про те, що ваші документи Word містять Word.Document.8 , або ви хочете сказати, що file MyTermPaper звіти Word.Document.8 для ваших документів Word?
Скотт

Які саме казкові персонажі?
slhck

По-перше, я кажу, що у документі * 12/03/99 Висновки + TOC (COPY) є щось на зразок Word.Document.8 у своєму вмісті, який я міг би шукати, щоб назвати цей документ за допомогою .doc у кінець. Символи, які, здається, мають значення досі, є косою рисою, але крім тих, які я вказав у цьому файлі, є блок-дужки, апострофи, періоди, цитати та, швидше за все, майже кожен символ. Я ще не впевнений, що буде мати значення, крім косої риски.
v8media

Щойно знайдено Trid ( mark0.net/soft-tridnet-e.html ) із відповідної панелі праворуч. Чи є щось подібне для OS X?
v8media

Чому ви говорите, xargs -0 file | grep 'Word.Document.8'якщо fileкоманда не звітує Word.Document.8 ?
Скотт

Відповіді:


1

Я все ще не на 100% впевнений, що розумію питання, але ось пара думок.

  1. sed 's/:.*//'буде маніпулювати будь-яке ім'я файлу, у якому є двокрапка. Чи є двокрапка законним іменем файлу на Mac? Якщо ні, то це не буде для вас проблемою. В іншому випадку, розгляньте, sed 's/: Word.Document.8$//'чи робити або. sed 's/: [^:]*$//'.
  2. mvКоманда породжена xargsвиглядає як проблема. Спробуйте
    xargs -I % sh -c 'echo mv "%" "%.doc"'.

Схоже, колони наразі не дозволені, тому, ймовірно, не буде жодної з них, якщо вони не були дозволені в Mac OS 9 або попередніх версіях.
v8media

0

2-е питання полягає в тому, як я можу змінити сценарій, щоб він шукав одночасно більше одного типу файлів і давав кожному належне розширення?

Ось кілька підказок для початку роботи:

sed -e '/Word\.Document\.8/s/ щось / щось інше / ; s / інший / ще один / '\
    -e '/Excel\.Sheet\.8/s/ щось 2 / щось інше 2 / ; s / ще 2 / ще ще 2 / '\
    ...

або

awk '
      /Word\.Document\.8/ {
            Команди awk для Word
      }
      /Excel\.Sheet\.8/ {
            Команди awk для Excel
      }
          
'

Я думаю, що зараз пропущу цю частину. Зробити це окремо це не буде складно і мати 10 окремих сценаріїв для кожного формату, якщо мені доведеться.
v8media
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.