Portál AbcLinuxu, 8. května 2025 18:20
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.