Quick Bash Tip: come estrarre nome file ed estensione da un path

Continuano le piccole note di bash. Stavolta vediamo un paio di facili comandi per estrarre nome file ed estensione da un path. Inserisco il tutto in un piccolo script che analizza tutti i file nella directory corrente e ne stampa prima il nome e poi l’estensione.

for file in $(ls) ; do
  filename=${file##*/}
  basename=${filename%\.*}
  extension=${filename##*.}
  echo Nome: ${basename}, estensione: ${extension}
done

Ulteriori informazioni (per i non deboli di cuore) a questo indirizzo.

Annunci
Questa voce è stata pubblicata in Uncategorized e contrassegnata con , , , . Contrassegna il permalink.

7 risposte a Quick Bash Tip: come estrarre nome file ed estensione da un path

  1. mamozzi ha detto:

    Anch’io l’ho scoperto su un sito (http://bashcurescancer.com/10-steps-to-beautiful-shell-scripts.html) prima di scoprire che c’è anche nella man page di Bash. Si rivelano comodissimi, non serve passare per sed o awk per fare le operazioni principali su una variabile.
    P.S. Comunque la parte ” filename=${file##*/}” puoi risparmiartela, c’è il comando “basename” che fa proprio questo.
    Ciao e complimenti per il blog, ci sono un sacco di cose interessanti!

  2. Alfredo ha detto:

    Ciao, sto cercando di fare uno script che rinomini i file e sto provando una cosa del genere
    #!/bin/bash

    echo -n “Cosa vuoi mettere d’avanti ad i file da rinominare? ”
    read var

    for i in *.jpg mv $var; done

    Ma aggiunge nuovamente l’estensione.
    Ho provato ad adattare il tuo ciclo for, ma non va 😦
    Mi sai aiutare, grazie e buon inizio anno 😉

  3. Luigi De Marco ha detto:

    E’ inutile fare tutto sto casino, basta usare sed.
    nome=$(echo -n $nomefile | sed ‘s|\.[A-Za-z0-9]*||g’)
    estensione=$(echo -n $nomefile | sed ‘s|[A-Za-z0-9]\.||g’)

  4. giuseppe ha detto:

    Salve ragazzi ho un problema shell da risolvere

    • giuseppe ha detto:

      praticamente devo scrivere un programma verifica-analogie.sh che riceva come parametri due file di testo (il primo conterrà una serie di coppie cartellaA cartella B una per riga del file mentre il secondo dovra essere creato da programma.
      Esempio d’uso sara:verifica_analogie.sh file_cartelle.txt file_output.txt
      Per ogni coppia di catelle il programma dovrà verificare per ogni file contenuto nella cartellaA non sia analogo a un fia nella cartellaB. Un file X è analogo a un file Y se il nome senza estensione è uguale e l’estensione del nuovo file è txt, doc o xls(esempio pippo.txt e pippo.doc sono analoghi, pippo.txt e pippo. non sono analoghi). Se il file risulta analogo il programma dovrà scrivere nel file file_output.txt i nomi dei due file analoghi seguiti dalla cartellaB in cui il secondo file si trova.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

w

Connessione a %s...