Creare un servizio di conversione della codifica del testo in Automator

3

Stavo cercando di creare un servizio Finder per convertire facilmente la codifica del testo di alcuni file. Poiché il set di caratteri predefinito per il cinese semplificato in Windows è lo standard nazionale cinese GB18030 (non UTF-8 utilizzato su Mac).

Con l'aiuto delle risposte dei servizi - Automator Ottieni il nome file del file selezionato - Chiedi a , ho impostato Il servizio riceve selezionato: File o cartelle in: Finder

Quindi, ho creato questo script di shell in Automator:

for f in "$@"
do
    iconv -f gb18030 -t utf-8 f > f.new
done

Tuttavia, quando eseguo il servizio quando selezioni f , non vedo il f.new appena creato in Finder. Immagino di aver impostato il percorso di output sbagliato. Ma non so quale sia il modo giusto per risolverlo.

    
posta jackxujh 02.12.2017 - 19:57
fonte

1 risposta

3

Modifica:

for f in "$@"
do
    iconv -f gb18030 -t utf-8 f > f.new
done

A:

for f in "$@"; do
    if [[ ! $(basename "$f") =~ .*\..* ]]; then
        iconv -f gb18030 -t utf-8 < "$f" > "${f}-new"
    else
        iconv -f gb18030 -t utf-8 < "$f" > "${f%.*}-new.${f##*.}"
    fi
done

E imposta Passa l'input: a come argomenti su Esegui script di shell azione .

Per rispondere al commento fatto da Gordon Davisson per gestire un nomefile con nessuna estensione , ho modificato il codice nella mia risposta sopra.

Il codice verifica la parte nome file del nome percorso completo passato a Esegui script di vendita azione usando un regex per vedere se ha un'estensione, o più letteralmente un . come parte del nomefile , e se non c'è . nel nomefile elabora se ramo , altrimenti elabora il ramo else .

Nota anche che usando un glob invece di una regex , ad esempio:

if [[ ! $(base name "$f") == *.* ]]; then

Funzionerebbe anche per testare un'estensione. In entrambi i casi, il nuovo nome di percorso completo seguirà in modo appropriato uno di questi due esempi:

  • /path/to/filename diventa: /path/to/filename-new
  • /path/to/filename.ext diventa: /path/to/filename-new.ext

Nota: questa risposta presuppone che i nomi di percorso completi non contengano caratteri nulli e / o ritorni a capo e / o avanzamento riga. I nomi di percorso appropriati per l'IMO non contengono tali caratteri e non cercherò di testarli.

    
risposta data 02.12.2017 - 20:07
fonte

Leggi altre domande sui tag