GNU/Linux >> Znalost Linux >  >> Linux

Jak odstranit koncové znaky v názvech souborů v Bash?

V prostředí shell by se dalo jednoduše:

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

Shell dokáže vytvořit seznam názvů souborů s obyčejným globem a ${var%pattern} odstraní (nejkratší) odpovídající vzor z konce řetězce v proměnné var . Protože konečné rozšíření je vždy .avi , právě jsem jej odstranil se vzorem a přidal zpět. S uvozovkami by to mělo fungovat i s názvy souborů obsahujících mezery, jako je Fancy Name for a Show.s01e01]Asdf.avi


Tím dojde k přejmenování souborů. \w* potřebujete k označení libovolného počtu alfanumerických znaků.

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

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


To je všelijak nepraktické – ostatní odpovědi jsou mnohem rychlejší a kratší – ale...

Můžete použít PowerShell! Microsoft jej nedávno otevřel jako open-source a učinil jej multiplatformním. Pokyny ke stažení a instalaci pro váš operační systém najdete v části „Získat PowerShell“.

Jakmile jej nainstalujete, můžete použít tento krátký skript:

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

V podstatě prochází každý objekt v aktuálním adresáři, což je soubor odpovídající *]*.avi , dostane část před závorku, připne .avi zpět na něj a přiřadí jej jako nový název.

Chcete-li jej spustit přímo z Bashe, použijte tuto pologolfovou jednovložku:

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

Citace uniklá s laskavým svolením této odpovědi Stack Overflow.

(Testováno v Bash na Ubuntu ve Windows. Pravděpodobně existuje mnohem kratší způsob, jak to udělat s PowerShell, ale chtěl jsem ukázat něco, co je srozumitelné pro lidi, kteří neznají regulární výrazy.)


Linux
  1. Jak ladit Bash skript?

  2. Jak změnit název souboru obsahujícího znaky?

  3. Jak poznám název souboru skriptu ve skriptu Bash?

  1. Jak převést .. v názvech cest na absolutní název v bash skriptu?

  2. Jak odstranit složky s určitým názvem

  3. Jak mohu spočítat počet znaků v proměnné Bash

  1. Jak zjistit Bash>=4.0?

  2. Odstraňte všechny speciální znaky a velká a malá písmena z řetězce v bash

  3. Jak můžete odstranit duplikáty z historie bash?