Jako argument můžete explicitně předat prázdný řetězec.
rename .old '' *.old
A s podsložkami find . -type d -exec rename .old '' {}/*.old \;
. {}
je náhradou za záznam nalezený s find
a \;
ukončí arglist pro příkaz zadaný po -exec
.
rename
je mírně nebezpečný, protože podle jeho manuálové stránky:
rename přejmenuje zadané soubory nahrazením prvního výskyt...
S názvy souborů jako c.txt.parser.y
to naštěstí udělá špatně .
Zde je řešení pomocí find
a bash
:
find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done
Mějte na paměti, že se to přeruší, pokud název souboru obsahuje nový řádek (vzácné, ale ne nemožné).
Pokud máte GNU find, je toto spolehlivější řešení:
find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done
Používám toto:
find ./ -name "*.old" -exec sh -c 'mv $0 `basename "$0" .old`.new' '{}' \;
Verze přejmenování v Perlu může odstranit rozšíření následovně:
rename 's/\.txt$//' *.txt
To by mohlo být kombinováno s hledáním, aby se také vytvořily podsložky.