Adresáre, súbory

14.05 | 22:38 | rozsypané korálky | kamowski

Pár (2) nie každodenných ale užitočných postupov na prácu s adresármi a súbormi.

1) Premenuj súbory podľa zoznamu (rename files from list)

Situácia: v adresári mám množinu súborov, tieto majú názvy v rôznych jazykoch, písmach
Cieľ: chcem z nich vybrať súbory *.mkv a premenovať ich, ale nástroj Thunar - Bulk Rename Files mi z nejakého dôvodu nepostačuje, nevyhovuje alebo musím použiť kombináciu s ručným premenovaním
Riešenie:

find . -name "*.mkv" > files.txt

./prvý.mkv ./novýprvý.mkv

while read line; do eval mv $line; done < files.txt

#určite si to najprv vyskúšajte na nejakej vzorke kópií, čo ak som tam urobil chybu

2) Vytvor adresáre zo zoznamu (create directories from list)

Situácia: mám množinu adresárov s diakritikou a na inom (záložnom) médiu podobnú množinu adresárov ale bez diakritiky
Cieľ: chcem mať adresáre s diakritikou aj na druhom médiu ale nechcem kopírovať zo zdroja, je tam veľké množstvo dát a nechcem ani prepisovať stávajúce, pretože ich je veľké množstvo
Riešenie:

ls -d -- */ > dirlist.txt

cut -d " " -f 1 dirlist.txt | xargs echo mkdir

cut -d " " -f 1 dirlist.txt | xargs mkdir

    • RE: Adresáre, súbory 18.05 | 08:32
      Avatar Richard Antix  Používateľ

      Súbory s medzerami sú vždy "opruz". Buď to treba mať v úvodzovkách, alebo medzery escapovať.

      Ja na odstránenie a nahradzenie medzier podtržníkmi a súčasne na odstránenie diakritiky používam detox, je i v repozitároch alebo na https://github.com/dharple/detox

       

      Nejako takto:

      for file in *; do detox "$file" ; done

      • RE: Adresáre, súbory 20.05 | 08:45
        Avatar paldopice   Používateľ

        Nejako takto ti to presne fungovat nebude:

        $ for i in *; do file $i; done
        aaa: directory
        bbb: cannot open `bbb' (No such file or directory)
        ccc: cannot open `ccc' (No such file or directory)
        ddd: cannot open `ddd' (No such file or directory)
        eee: directory
        
        $ find ./ -mindepth 1 -type d -print0 | xargs -0 ls -d1
        ./aaa
        './bbb ccc ddd'
        ./eee