Come identificare il tipo di file per una grande quantità di file e allegare un'estensione adatta a ciascuno

2

Ho poco più di mille (1000) file il cui suffisso / estensione è stato modificato da un motore di database tutti alla stessa cosa (ad esempio fileName.abcd dove .abcd si trova su ogni file indipendentemente dal fatto che si tratti di un jpg, pdf, o qualsiasi altra cosa).

L'obiettivo è convertire tutti i file in PDF, ma prima voglio solo ordinare i vari tipi di file in cartelle separate.

Uso Mac OS X e vedo che ci deve essere uno script Terminal che:

  1. Identifica il file (forse con il comando 'File'?) e poi ...
  2. Aggiungi l'estensione appropriata che poi ...
  3. Consentitemi di ordinare e posizionarli manualmente in cartelle separate per ulteriori elaborazioni a seconda del loro tipo di file.

Usando il comando Terminal 'File' su un file con il suffisso del database, i risultati tipici sono abbastanza verbosi come questo, che almeno mostra che il Mac può identificare i tipi di file anche se hanno i suffissi 'errati':

  • Dati immagine JPEG, standard JFIF 1.01
  • Documento PDF, versione 1.3
  • Dati in formato RTF, versione 1, ANSI
  • ecc.

Quindi, ho solo bisogno di uno script che tagga i file in modo da poter usare Automator per rinominare i file in seguito con il suffisso appropriato.

Prendo atto che se nel Terminale I digito "File" e dopo trascino o copio più file su di esso e tocchi return, Terminal li identifica correttamente tutti nello stesso ordine, ma non è utile a meno che non almeno tag ogni tipo di file in modo diverso.

Immagino che questo compito iniziale sia troppo difficile per Automator, ma mi piacerebbe essere smentito.

Qualsiasi aiuto nel fare questo sarebbe apprezzato. Ho controllato questa scheda e in altri casi mi aspettavo che qualcun altro avesse avuto un problema simile, ma non ho trovato nessun problema elencato da nessuna parte.

    
posta Steve K 23.03.2015 - 10:52
fonte

1 risposta

1

È piuttosto facile combinare alcuni strumenti standard:

  • file per cercare il tipo mime
  • tr per rimuovere le barre (altrimenti, avresti cartelle nidificate per gruppi di file diversi)
  • bene, alcuni ovvi comandi mkdir e mv
for file in *
do
    mime=$(file --brief --mime-type "$file" | tr '/' '_')
    mkdir -p "$mime"
    mv "$file" "$mime/$file"
done

In alternativa, puoi anche elencare direttamente le estensioni di file per ogni tipo di mime previsto e rinominarle automaticamente in modo appropriato.

for file in *
do
    mime=$(file --brief --mime-type "$file")

    case "$mime" in
    "image/jpeg")
        extension="jpeg"
        ;;
    "text/plain")
        extension="txt"
        ;;
    "application/pdf")
        extension="pdf"
        ;;
    *)
        continue;
        ;;
    esac

    filename="${file%.*}"

    mv "$file" "$filename.$extension"
done

Tieni presente che, per motivi di leggibilità, non mi sono occupato dei nomi dei file contenenti spazi. Se li hai, dovrai applicare uno dei modelli da trattare spazi nei nomi di file . Come sembra piuttosto che tu non li abbia, li ho lasciati fuori, perché rendono gli script che sembrano molto più complicati così come sono.

    
risposta data 23.03.2015 - 11:52
fonte

Leggi altre domande sui tag