Portál AbcLinuxu, 5. listopadu 2025 10:21
Střelba od boku:
movebasename() {
dirname="$(dirname "${1}")"
basename="$(basename "${1}")"
newname="${basename,,*}"
[ "${basename}" != "${newname}" ] && echo "${1}" "${dirname}/${newname}";
}
changecase() {
find "${1}" -maxdepth 1 -type f | while read name; do
movebasename "${name}"
done;
find "${1}" -maxdepth 1 -mindepth 1 -type d | while read name; do
changecase "${name}"
done;
movebasename "${1}"
}
changecase '/cesta/k/nějakému/adresáři'
Prohlédni si výstup tohoto kódu — měl by obsahovat dva sloupce se jmény všech souborů a adresářů před přejmenováním a po něm, tj. ukazuje, jak by se jména změnila, kdyby to běželo opravdu „naostro“. V prvním sloupci bude původní název a ve druhém sloupci nový název. Pokud se seznamy zdají být v pořádku, nahraď v movebasename() echo za mv a spusť to znova.
Před přejmenováním může být užitečné udělat si pomocí cp -a --reflink adresář jméno_zálohy záložní kopii metadat (ne nutně celých dat!) pro případ, že by se při přejmenování něco zvrtlo a nebylo by možné to manuálně opravit. To ovšem funguje pouze na rozumných souborových systémech, ne na předpotopních. U předpotopních souborových systémů je třeba odolat pokušení použít místo toho cp -a --link adresář jméno_zálohy, protože to nebude fungovat — přejmenování zasáhne i záložní kopii skrz data adresářů, která budou místo copy-on-write jen tupě sdílená.
Přejmenování všeho zpátky na velká písmena by se dalo zařídit nahrazením ,, za ^^ v přiřazení do newname v movebasename().
convmv -r -f utf-8 --lower --notest .
sudo apt-get install detox
echo 'sequence "default" {
utf_8;
safe;
lower;
wipeup;
};' > $HOME/.detoxrc
detox -r adresář
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.