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.
for f in *v9.zip; do echo mv "${f}" "${f%v9.zip}.zip"; done
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é.