Portál AbcLinuxu, 26. dubna 2024 18:42


Dotaz: Jak změnit celý adresář na malé znaky

19.1.2014 21:55 Hantor
Jak změnit celý adresář na malé znaky
Přečteno: 299×
Odpovědět | Admin
Ahoj, neporadil by někdo, jak změnit názvy všech souborů a podadresářů v něakém adresáři? Díky za pomoc
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.1.2014 23:23 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak změnit celý adresář na malé znaky
Odpovědět | | Sbalit | Link | Blokovat | Admin

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().

Nerekurzivní implementace pomocí find by byla docela hezkým vylepšením, ale problém je, že find vrací vždy napřed adresáře a teprve poté jejich obsah. Pro přejmenování by bylo potřeba opačné pořadí. Hledat zvlášť soubory a vypsat je předem (před adresářem, který je obsahuje) příliš nepomáhá, protože pořadí vnořených adresářů je stále opačné.
20.1.2014 07:00 pavel
Rozbalit Rozbalit vše Re: Jak změnit celý adresář na malé znaky
http://www.abclinuxu.cz/poradna/linux/show/213211
20.1.2014 11:29 xxl | skóre: 25
Rozbalit Rozbalit vše Re: Jak změnit celý adresář na malé znaky
Odpovědět | | Sbalit | Link | Blokovat | Admin
Změna v aktuálním adresáři:

convmv -r -f utf-8 --lower --notest .
20.1.2014 14:59 brm
Rozbalit Rozbalit vše Re: Jak změnit celý adresář na malé znaky
Odpovědět | | Sbalit | Link | Blokovat | Admin
sudo apt-get install detox

echo 'sequence "default" {
        utf_8;
        safe;
        lower;
        wipeup;
};' > $HOME/.detoxrc

detox -r adresář
pepe_ avatar 20.1.2014 15:44 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Jak změnit celý adresář na malé znaky

To je dobré !

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.