Come posso usare BASH per cambiare “A” Train.flac in 'A' Train in un nome file?


1

Ho provato ogni combinazione di barra rovesciata, asterisco e parentesi graffe, nulla sembra funzionare. Sto usando il terminale in OS X e lo apprezzerei molto se qualcuno potesse guidarmi dritto.


Cosa intendi? Stai cambiando "in" e / o rimuovendo .flac? Stai cercando di renderlo un comando in
blocco

I miei umili ringraziamenti a STATUS__ACCESS. Questo è iniziato come Windows non piace "su un'unità di rete di Mac OS X, probabilmente a causa di alcuni cambiamenti in Lion. Ho pensato (erroneamente) che questa sarebbe stata un'opportunità per saperne di più sugli script BASH con una rapida ridenominazione.
zoltanzylox

Risposte:


0

È possibile utilizzare $()per eseguire l'attività trdi conversione, quindi rimuovere l'estensione del file in un secondo passaggio. Sembrerebbe qualcosa di simile a:

# Say FNAME is the variable that stores your original file name
# Convert the double quotes to single quotes:
SQFNAME=$(echo $FNAME|tr '""' "''")
# or, as an alternative in pure Bash (mind the shell character escaping):
SQFNAME=echo ${FNAME//\"/\'}
# then simply strip the extension
NEWFNAME=${SQFNAME%.flac}
# or, if you wanted to remove the extension delimited by the _last_ dot
NEWFNAME=${SQFNAME%.*}
# or, if you wanted to remove the extension delimited by the _first_ dot
NEWFNAME=${SQFNAME%%.*}

Il "nuovo" nome del file convertito sarà ora nella NEWFNAMEvariabile.


Verifica teorica:

#!/usr/bin/env bash
FNAME="\"A\" Train.flac"
echo "Unchanged name: $FNAME"
SQFNAME=${FNAME//\"/\'}
echo "Converted quotes: $SQFNAME"
NEWFNAME=${SQFNAME%.flac}
echo "New file name: $NEWFNAME"

Resa di esecuzione:

$ bash test.sh
Unchanged name: "A" Train.flac
Converted quotes: 'A' Train.flac
New file name: 'A' Train

1

Vorrei usare lo prenamescript Perl che viene fornito con la maggior parte delle installazioni Perl (collegato ad renamees. Nelle distribuzioni basate su Debian, ma su es. Fedora ne renameè presente un altro , quindi cerca prima il caso se non sei sicuro, o usa prenamecome sotto):

prename 's/"/'\''/g' \"A\"\ Train.flac

Lo strumento giusto per il lavoro giusto.

Per ottenere un valore letterale ', prima interrompo l'ambiente di quotazione corrente, quindi esco da a ', quindi riavvio l'ambiente di quotazione.


Immagino che tu non voglia davvero eliminare l'estensione del nome del file e la domanda è formulata in modo ambiguo, ma se lo fai:

prename 's/"/'\''/g; s/\..*$//' \"A\"\ Train.flac

o

prename 's/"/'\''/g; s/\.flac$//' \"A\"\ Train.flac

Utilizzare l' -ninterruttore per visualizzare le modifiche senza applicarle se si desidera testare i comandi in anticipo.

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.