GNU/Linux >> Znalost Linux >  >> Linux

Přejmenování souborů tak, aby měly přípony malými písmeny pomocí „přejmenovat“?

Snažím se v současné době přejmenovat velkou sadu souborů a používám k tomu docela nešikovné metody, jako například:

rename 's:(.*).MOV:$1.mov:g' *.MOV
rename 's:(.*).JPG:$1.jpg:g' *.JPG

Co bych opravdu rád udělal, je umět kombinovat všechny tyto příkazy pomocí „y“ sed operátor. Je zřejmé, že pomocí tohoto operátoru můžete transformovat položky na malá písmena. Problém je, že potřebuji převést pouze rozšíření. Existuje způsob, jak to provést pomocí tohoto příkazu? Potřebuji v podstatě transformovat skupinu zachycení v následujícím výrazu na malá písmena:^.+.(.+)$ . Existuje způsob, jak to udělat? Jsem v těchto typech přeměn tak trochu nový.

Přijatá odpověď:

To je rename založené na Perlu nalezený na Debianu, Ubuntu a derivátech, soudě podle syntaxe. Nemůžete použít tr operátor, protože působí na celý řetězec. Ale můžete příponu porovnat a malá písmena ji použít jako L .

rename 's/.[^.]*$/L$&/' *.JPG *.MOV

Zde je to zbytečné, ale pokud se regulární výraz shodoval více než část, kterou chcete psát malými písmeny, můžete část, kterou chcete porovnat, umístit do skupiny:

rename 's/.([^.]*)$/.L$1/' *.JPG *.MOV

Nahraďte *.JPG *.MOV podle *.* pracovat se všemi soubory bez ohledu na příponu. V bash ≥4.3 (a také v bash 4.0–4.2, s upozorněním, že to také prochází symbolické odkazy na adresáře), můžete snadno pracovat se soubory v podadresářích a tak dále rekurzivně:

rename 's/.[^.]*$/L$&/' **/*.*

Pro fanoušky zsh (:r a :e modifikátory izolují příponu od zbytku souboru):

autoload zmv
zmv '*.(MOV|JPG)' '${f:r}.${(L)f:e}'      # these extensions, current directory
zmv '*.*' '${f:r}.${(L)f:e}'              # all extensions, current directory
zmv '**/*.*' '${f:r}.${(L)f:e}'           # all extensions, recursive directory traversal

Linux
  1. 3 způsoby, jak odstranit všechny soubory v adresáři kromě jednoho nebo několika souborů s příponami

  2. Jak přejmenovat soubory v Linuxu

  3. Centos – Přejmenovat všechny soubory s určitým názvem?

  1. Cat soubory s adresářem?

  2. Přejmenovat soubory v adresáři?

  3. Zálohujte své soubory pomocí rsync

  1. Jak přejmenovat sadu souborů se vzorem?

  2. Přejmenování mnoha souborů v Linuxu podle vzoru

  3. Linux přejmenovává soubory na velká písmena