GNU/Linux >> Linux Esercitazione >  >> Linux

Come rimuovere i caratteri finali nei nomi di file in Bash?

In shell, si potrebbe fare semplicemente:

for x in *]*.avi ; do 
    mv -i "$x" "${x%]*.avi}.avi"
done

La shell può produrre un elenco dei nomi dei file con solo un normale glob e ${var%pattern} rimuove il modello di corrispondenza (più breve) dalla fine della stringa nella variabile var . Poiché l'estensione finale è sempre .avi , l'ho appena rimosso con lo schema e l'ho aggiunto di nuovo. Con le virgolette, dovrebbe funzionare anche con nomi di file contenenti spazi, come Fancy Name for a Show.s01e01]Asdf.avi


Questo rinominerà i file. Hai bisogno di \w* per indicare qualsiasi numero di caratteri alfanumerici.

rename 's/\]\w*//' *

Riferimento:http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards


Questo è assolutamente poco pratico - le altre risposte sono molto più veloci e più brevi - ma...

Puoi usare PowerShell! Microsoft lo ha reso open source di recente e lo ha reso multipiattaforma. Per i download e le istruzioni di installazione per il tuo sistema operativo, consulta la sezione "Ottieni PowerShell".

Una volta installato, puoi usare questo breve script:

Get-ChildItem -File '*]*.avi' | ForEach-Object {
    Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}

Fondamentalmente, passa attraverso ogni oggetto nella directory corrente che è un file corrispondente a *]*.avi , ottiene la parte prima della parentesi, aggiunge .avi torna su di esso e lo assegna come nuovo nome.

Per eseguirlo direttamente da Bash, usa questo one-liner semi-golfed:

powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'

Citazione in fuga per gentile concessione di questa risposta Stack Overflow.

(Testato in Bash su Ubuntu su Windows. Probabilmente c'è un modo molto più breve per farlo con PowerShell, ma volevo mostrare qualcosa che fosse comprensibile per le persone che non conoscono le espressioni regolari.)


Linux
  1. Come scrivere un ciclo in Bash

  2. Come eseguire il debug di uno script Bash?

  3. Come modificare un nome di file contenente caratteri?

  4. Come faccio a conoscere il nome del file di script in uno script Bash?

  5. Come convertire .. in nomi di percorso in nome assoluto in uno script bash?

Come commentare in Bash

Come rimuovere (^M) caratteri da un file in Linux

Come rimuovere gli spazi dai nomi dei file in Linux

Come rimuovere tutti i caratteri di spazio bianco da un file di testo

Come eseguire uno script Bash

Come rimuovere i caratteri non validi dai nomi dei file?