Come aggiungere estensioni a molti file usando il contenuto di ciascun file?


2

Ho oltre 10.000 file che non hanno estensioni da versioni precedenti di Mac OS. Sono estremamente nidificati nella struttura dei file e hanno anche tutti i tipi di caratteri e formattazioni strane. Non hanno più tipi di file o codici creatori collegati a loro. Molti di questi file hanno testo nel file che mi permetterà di determinare le estensioni (ad esempio Word.Document.8 è nel testo di ogni file creato da quella versione di Word).

Ho trovato uno script che sembra funzionare per uno di questi tipi di file alla volta, ma cancella parti di nomi di file dopo caratteri nefasti, il che non va bene.

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

Devo prima pulire i caratteri nei nomi dei file o gestirli a livello di codice con quelli della sceneggiatura per lasciarli uguali? Fintanto che non perdo alcuna informazione dai nomi dei file, non vedo alcun problema nell'eliminare barre e altri caratteri problematici. Inoltre, se pulisco i nomi dei file, è probabile che ci siano duplicati, quindi qualsiasi script di pulizia dovrebbe aggiungere qualcosa come "-1" prima dell'estensione per assicurarsi che nulla vada perso.

Non sono legato a questo script, ma è comprensibile, il che è un professionista. Mac OS X 10.6 è installato su questo file server, ma ho accesso a qualsiasi versione recente di OS X.


Stai dicendo che i tuoi documenti di Word contengono Word.Document.8 o stai dicendo che i file MyTermPaper rapporti Word.Document.8 per i tuoi documenti di Word?
Scott,

Quali personaggi nefasti esattamente?
slhck,

Per la prima, sto dicendo che il documento * 12/03/99 Conclusioni + TOC (COPY) ha qualcosa come Word.Document.8 nel suo contenuto, che potrei cercare per nominare quel documento con un .doc a fine. I personaggi che sembrano importanti finora sono barre, ma oltre a quelli che ho elencato nel nome di quel file, ci sono parentesi a blocchi, apostrofi, punti, virgolette e molto probabilmente quasi ogni personaggio. Non sono ancora sicuro quale sarà importante oltre alle barre.
v8media,

Ho appena trovato Trid ( mark0.net/soft-tridnet-e.html ) dalla relativa barra sulla destra. C'è qualcosa del genere per OS X?
v8media,

Perché stai dicendo xargs -0 file | grep 'Word.Document.8'se il filecomando non sta segnalando Word.Document.8 ?
Scott,

Risposte:


1

Non sono ancora sicuro al 100% di aver capito la domanda, ma qui ci sono un paio di pensieri.

  1. sed 's/:.*//'manipolerà qualsiasi nome di file che contiene due punti. I due punti sono un carattere di nome file legale sul Mac? In caso contrario, questo non sarà un problema per te. Altrimenti, considera di fare sed 's/: Word.Document.8$//'o. sed 's/: [^:]*$//'.
  2. Il mvcomando generato da xargssembra un problema. Prova
    xargs -I % sh -c 'echo mv "%" "%.doc"'.

Sembra che i due punti non siano attualmente consentiti, quindi probabilmente non ne avranno nessuno a meno che non siano consentiti in Mac OS 9 o precedenti.
v8media,

0

La seconda domanda è come posso cambiare lo script in modo che possa cercare più di un tipo di file contemporaneamente e dare a ciascuno l'estensione corretta?

Ecco un paio di suggerimenti per iniziare:

sed -e '/Word\.Document\.8/s/ qualcosa / qualcos'altro / ; s / altro / ancora un altro / '\
    -e '/Excel\.Sheet\.8/s/ qualcosa 2 / qualcos'altro 2 / ; s / altro 2 / ancora un altro 2 / '\
    ...

o

awk '
      /Word\.Document\.8/ {
            comandi awk per Word
      }
      /Excel\.Sheet\.8/ {
            comandi awk per Excel
      }
          
'

Penso che salterò quella parte per ora. Non sarà difficile farlo separatamente e avere 10 script separati per ogni formato, se devo.
v8media,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.