Jak používat příkaz pro přejmenování v systému Linux

Naučte se ovládnout přejmenovávání souborů ve světě Linuxu a dopřejte mv – a sobě – odpočinek. Přejmenování je flexibilní, rychlé a někdy i jednodušší. Zde je návod k této mocnosti příkazů.

Co je špatného na mv?

Na mv není nic špatného. Příkaz ano dobrá prácea nachází se ve všech distribucích Linuxu, v macOS a v dalších operačních systémech podobných Unixu. Takže je vždy k dispozici. Někdy ale potřebujete jen buldozer, ne lopatu.

Příkaz mv má smysl života, a to je přesouvat soubory. Je šťastným vedlejším efektem, že jej lze použít k přesunutí existujícího souboru do nového souboru s novým názvem. Výsledkem je přejmenování souboru, takže dostaneme, co chceme. Ale mv není vyhrazený nástroj pro přejmenování souborů.

Přejmenování jednoho souboru pomocí mv

Chcete-li použít mv k přejmenování souboru, zadejte mv, mezeru, název souboru, mezeru a nový název, který chcete, aby soubor měl. Poté stiskněte Enter.

Pomocí ls můžete zkontrolovat, zda byl soubor přejmenován.

mv oldfile.txt newfile.txt
ls *.txt

Přejmenování více souborů pomocí mv

Věci jsou složitější, když chcete přejmenovat více souborů. mv nemá žádnou schopnost vypořádat se s přejmenováním více souborů. Musíte se uchýlit k použití některých šikovných Bashových triků. To je v pořádku, pokud znáte nějaké příkazové řádky střední třídy, ale složitost přejmenování více souborů pomocí mv je v ostrém kontrastu se snadností použití mv k přejmenování jednoho souboru.

Věci rychle eskalují.

Řekněme, že máme adresář s řadou souborů různých typů. Některé z těchto souborů mají příponu „.prog“. Chceme je na příkazovém řádku přejmenovat tak, aby měly příponu „.prg“.

Jak se můžeme přetahovat, aby to udělal za nás? Pojďme se podívat na soubory.

ls *.prog -l

Zde je jeden způsob, jak to udělat, který se neuchýlí k psaní skutečného souboru skriptu Bash.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

pro f v *.prog;  udělat mv --

Fungovalo to? Zkontrolujeme soubory a uvidíme.

ls *.pr*

Takže ano, fungovalo to. Nyní jsou to všechny soubory „.prg“ a v adresáři nejsou žádné soubory „.prog“.

Co se právě stalo?

Co ten dlouhý příkaz vlastně udělal? Pojďme to rozebrat.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

První část spustí smyčku, která postupně zpracuje každý soubor „.prog“ v adresáři.

Další část říká, co zpracování udělá. Používá mv k přesunutí každého souboru do nového souboru. Nový soubor bude pojmenován původním názvem souboru s výjimkou části „.prog“. Místo toho bude použita nová přípona „.prg“.

Musí existovat jednodušší způsob

Rozhodně. Je to příkaz přejmenovat.

rename není součástí standardní distribuce Linuxu, takže jej budete muset nainstalovat. V různých rodinách Linuxu má také jiný název, ale všechny fungují stejným způsobem. Budete muset pouze nahradit příslušný název příkazu podle typu Linuxu, který používáte.

v Ubuntu a distribucích odvozených z Debianu nainstalujete přejmenování takto:

sudo apt-get install rename

V distribucích odvozených od Fedory a RedHat instalujete prename takto. Všimněte si počátečního „p“, které znamená Perl.

sudo dnf install prename

Chcete-li jej nainstalovat do systému Manjaro Linux, použijte následující příkaz. Všimněte si, že příkaz pro přejmenování se nazývá perl-rename.

sudo pacman -Syu perl-rename

Pojďme to udělat znovu

A tentokrát použijeme přejmenování. Vrátíme zpět hodiny, takže máme sadu souborů „.prog“.

ls *.prog

Nyní je pomocí následujícího příkazu přejmenujeme. Pak zkontrolujeme s ls, zda to fungovalo. Pokud nepoužíváte Ubuntu nebo Linux odvozený z Debianu, nezapomeňte nahradit přejmenování příslušným názvem příkazu pro váš Linux.

rename 's/.prog/.prg/' *.prog
ls *.pr*

To fungovalo, nyní jsou to všechny soubory „.prg“ a v adresáři nezůstaly žádné soubory „.prog“.

Co se stalo tentokrát?

Pojďme si vysvětlit ten kousek magie ve třech částech.

První část je název příkazu, rename (nebo prename nebo perl-rename pro ostatní distribuce).

Poslední částí je *.prog, která říká, že přejmenování má fungovat se všemi soubory „.prog“.

Střední část definuje práci, kterou chceme na každém souboru provést. S znamená náhradník. První výraz (.prog) je to, co bude přejmenování hledat v každém souboru a druhý výraz (.prg) je to, čím bude nahrazen.

Střední část příkazu nebo centrální výraz je Perl ‚regulární výraza právě to dává příkazu přejmenovat jeho flexibilitu.

Změna jiných částí názvu souboru

Dosud jsme změnili přípony souborů, pojďme upravit další části názvů souborů.

V adresáři je spousta souborů zdrojového kódu C. Všechny názvy souborů mají předponu „slang_“. Můžeme to zkontrolovat pomocí ls.

ls sl*.c

Všechny výskyty „slang_“ nahradíme „sl_“. Formát příkazu je nám již známý. Jen měníme hledaný výraz, náhradní výraz a typ souboru.

rename 's/slang_/sl_' *.c

Tentokrát hledáme soubory „.c“ a hledáme „slang_“. Kdykoli je v názvu souboru nalezeno „slang_“, je nahrazeno „sl_“.

Výsledek tohoto příkazu můžeme zkontrolovat opakováním příkazu ls shora se stejnými parametry:

ls sl*.c

Odstranění části názvu souboru

Můžeme odstranit část názvu souboru tím, že hledaný výraz nenahradíme ničím.

ls *.c
rename 's/sl_//' *.c
ls *.c

Z příkazu ls můžeme vidět, že všechny naše soubory „.c“ jsou předřazeny „sl_“. Pojďme se toho zbavit úplně.

Příkaz přejmenovat má stejný formát jako dříve. Budeme hledat soubory „.c“. Hledaný výraz je „sl_“, ale neexistuje žádný substituční výraz. Dvě zpětná lomítka bez ničeho mezi nimi nic neznamenají, prázdný řetězec.

rename zpracuje postupně každý soubor „.c“. V názvu souboru bude hledat „sl_“. Pokud je nalezen, nebude nahrazen ničím. Jinými slovy, hledaný výraz se smaže.

Druhé použití příkazu ls potvrzuje, že předpona „sl_“ byla odstraněna z každého souboru „.c“.

Omezte změny na konkrétní části názvů souborů

Pomocí ls se podíváme na soubory, které mají v názvu souboru řetězec „param“. Pak použijeme přejmenování k nahrazení tohoto řetězce řetězcem „parametr“. Ještě jednou použijeme ls, abychom viděli účinek příkazu přejmenování na tyto soubory.

ls *param*
rename 's/param/parameter' *.c
ls *param*

Byly nalezeny čtyři soubory, které mají v názvu souboru „param“. param.c, param_one.c a param_two.c mají na začátku svého názvu „param“. third_param.c má na konci svého názvu, těsně před příponou, „param“.

Příkaz rename bude hledat „param“ všude v názvu souboru a ve všech případech jej nahradí „parametrem“.

Druhé použití příkazu ls nám ukazuje, že přesně to se stalo. Ať už bylo „param“ na začátku nebo na konci názvu souboru, bylo nahrazeno „parametrem“.

K upřesnění chování středního výrazu můžeme použít Perlovy metaznaky. Metaznaky jsou symboly, které představují pozice nebo sekvence znaků. Například ^ znamená „začátek řetězce“, $ znamená „konec řetězce“ a . znamená libovolný jednotlivý znak (kromě znaku nového řádku).

Použijeme začátek metaznaku řetězce ( ^ ), abychom omezili naše hledání na začátek názvů souborů.

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

Jsou uvedeny soubory, které jsme dříve přejmenovali, a vidíme, že řetězec „parameter“ je na začátku tří názvů souborů a na konci jednoho z názvů souborů.

Náš příkaz přejmenovat používá metaznak na začátku řádku (^) před hledaným výrazem „parametr“. To říká přejmenování, aby považovalo hledaný výraz za nalezený, pouze pokud je na začátku názvu souboru. Hledaný řetězec „parameter“ bude ignorován, pokud je kdekoli jinde v názvu souboru.

Při kontrole pomocí ls můžeme vidět, že název souboru, který měl na konci názvu „parametr“, nebyl změněn, ale u tří názvů souborů, které měly na začátku názvu „parametr“, byl hledaný řetězec nahrazen náhradním termín „hodnota“.

Síla přejmenování spočívá v síle Perlu. Všechny síla Perlu je vám k dispozici.

Vyhledávání pomocí seskupení

přejmenování má v rukávu ještě další triky. Podívejme se na případ, kdy můžete mít v názvech soubory s podobnými řetězci. Nejsou to úplně stejné řetězce, takže jednoduché hledání a nahrazování zde nebude fungovat.

V tomto příkladu používáme ls ke kontrole souborů, které začínají na „str“. Jsou dva, string.c a strangle.c. Oba řetězce můžeme přejmenovat najednou pomocí techniky zvané seskupování.

Centrální výraz tohoto příkazu přejmenování bude hledat řetězce v názvech souborů, které mají sekvenci znaků „stri“ nebo „stra“, kde za těmito sekvencemi bezprostředně následuje „ng“. Jinými slovy, náš hledaný výraz bude hledat „string“ a „strang“. Substituční termín je „bang“.

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

Použití ls podruhé potvrdí, že string.c se změnil na bang.c a strangle.c je nyní banngle.c.

Použití překladů s přejmenováním

Příkaz rename může provádět akce s názvy souborů nazývané překlady. Jednoduchým příkladem překladu by bylo vynutit sadu názvů souborů na velká písmena.

V níže uvedeném příkazu pro přejmenování si všimněte, že ke spuštění centrálního výrazu nepoužíváme s/, ale y/. To říká přejmenování, že neprovádíme substituci; provádíme překlad.

Výraz az je výraz v Perlu, který znamená všechna malá písmena v sekvenci od a do z. Podobně výraz AZ představuje všechna velká písmena v sekvenci od A do Z.

Ústřední výraz v tomto příkazu lze parafrázovat jako „jestliže se v názvu souboru najde některá malá písmena od a do z, nahraďte je odpovídajícími znaky ze sekvence velkých písmen od A do Z.“

Chcete-li vynutit, aby názvy souborů všech souborů „.prg“ byly velké, použijte tento příkaz:

přejmenovat ‚y/az/AZ/‘ *.prg

ls *.PRG

Příkaz ls nám ukazuje, že všechny názvy souborů „.prg“ jsou nyní psány velkými písmeny. Ve skutečnosti, abychom byli přísně přesní, už to nejsou soubory „.prg“. Jsou to soubory „.PRG“. Linux rozlišuje velká a malá písmena.

Tento poslední příkaz můžeme zvrátit obrácením pozice členů az a AZ v centrálním výrazu.

přejmenovat ‚y/AZ/az/‘ *.PRG

ls *.prg

Perl se (ne)naučíte za pět minut

Vypořádat se s Perlem je dobře strávený čas. Ale abyste mohli začít používat možnosti příkazu rename, které šetří čas, nemusíte mít vůbec žádné znalosti Perlu, abyste mohli sklízet velké výhody v oblasti výkonu, jednoduchosti a času.