GNU/Linux >> Znalost Linux >  >> Linux

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

Tyto jsem netestoval, takže jsem dal echo v přední části příkazů, abyste si je mohli vyzkoušet před odstraněním echa, abyste je mohli spustit doopravdy.

  1. for f in *v9.zip; do echo mv "${f}" "${f%v9.zip}.zip"; done
    
  2. for f in *_*; do echo mv "${f}" "${f//_/-}"; done
    

Pokud jde o váš třetí problém, jsem si jistý, že to lze také udělat, ale možná pomůže sofistikovanější přístup než raw shell one-liner, jak zmínil @tchrist.


Je tam rename příkaz poskytovaný většinou distribucí založených na Debian/Ubuntu, který napsal Robin Barker na základě původního kódu Larryho Walla z roku 1998(!).

Zde je výňatek z dokumentace:

  "rename" renames the filenames supplied according to the rule specified as the first argument.  The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames
  specified.  If a given filename is not modified by the expression, it will not be renamed.  If no filenames are given on the command line, filenames will be read via standard input.

  For example, to rename all files matching "*.bak" to strip the extension, you might say

          rename 's/\.bak$//' *.bak

  To translate uppercase names to lower, you'd use

          rename 'y/A-Z/a-z/' *

Používá perl, takže můžete použít perlské výrazy, aby odpovídaly vzoru, ve skutečnosti věřím, že to funguje podobně jako tchristovy skripty.

Další opravdu užitečnou sadou nástrojů pro hromadné přejmenování souborů je kolekce renameutils od Oskara Liljeblada. Zdrojový kód je hostitelem Free Software Foundation. Navíc mnoho distribucí (zejména distribuce založené na Debian/Ubuntu) má renameutils balíček s těmito nástroji.

Na jednu z těchto distribucí jej můžete nainstalovat pomocí:

$ sudo apt-get install renameutils

A pak pro přejmenování souborů spusťte tento příkaz:

$ qmv

Otevře se textový editor se seznamem souborů a můžete s nimi manipulovat pomocí funkce hledání a nahrazování vašeho editoru.


Moje oblíbené řešení je mé vlastní přejmenování skript. Nejjednodušší příklad, který mapuje vaše problémy, jsou tyto:

% rename 's/_/-/g' *
% rename 's/(\p{Lower})(\p{Upper})/$1 $2/g' *

I když opravdu nesnáším mezery v názvech souborů, zejména vertikální mezery:

 % rename 's/\s//g' *
 % rename 's/\v//g' *

a tak dále. Je založen na scénáři The Larry Wall, ale je rozšířen o možnosti, jako v:

usage: /home/tchrist/scripts/rename [-ifqI0vnml] [-F file] perlexpr [files]
    -i          ask about clobbering existent files
    -f          force clobbers without inquiring
    -q          quietly skip clobbers without inquiring
    -I          ask about all changes
    -0          read null-terminated filenames
    -v          verbosely says what its doing 
    -V          verbosely says what its doing but with newlines between old and new filenames
    -n          don't really do it
    -m          to always rename
    -l          to always symlink
    -F path     read filelist to change from magic path(s)

Jak vidíte, může změnit nejen názvy souborů, ale také to, kam směřují symbolické odkazy pomocí stejného vzoru. Nemusíte používat s/// vzor, ​​i když to člověk často dělá.

Ostatní nástroje v tomto adresáři jsou většinou pro práci s Unicode, z nichž některé jsou velmi užitečné.


Linux
  1. Metamorphose 2 – Dávkové přejmenování souborů a složek v systému Linux

  2. Jak přejmenovat více souborů dohromady v Linuxu pomocí 3 metod

  3. Odstranění části názvu souboru pro více souborů v systému Linux

  1. Najděte více souborů a přejmenujte je v Linuxu

  2. Rekurzivně přejmenovávat soubory (změnit příponu) v Linuxu

  3. Přejmenování souborů v linuxu pomocí regulárního výrazu

  1. Přejmenujte všechny soubory a názvy adresářů na malá písmena v Linuxu

  2. Jak přejmenovat soubory v Linuxu

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