Хрустнем мозгом господа линуксойды.
Feb. 21st, 2011 12:34 amЧой-то скучно, чой-то давно ничего не писал. Пока не буду писать холиварный пост Wndows vs Linux или Maemo vs Windows Mobile vs Android о своих впечатлениях об n900, т.к. они пока недостаточно сформированны. Скажу уклончиво - девайс сыроват.

Намедни с торентов накачал уйму ромов для эмулятораDendyNES (special for
cluster_d ). И там так много файлов, что эмулятор (для Maemo!) их индексирует несколько минут и листать их запаришься. По сему родилась задача - разложить их по папкам, согласно буквам алфавита.
Внимание вопрос: Как написать BASH-скрипт (или какой другой скрипт, питона к сожалению я не знаю), который бы: а) Создал папки от A до Z; б) разложил файлы согласно первой букве в имени файла в соответствующую папку (разумеется "А" и "а" кладётся в папочку "А"). Цифирные названия кладётся отдельно в отдельную папку.
Если есть любые идеи, с удовольствие выслушаю (можете даже меня направить гуглить по теме, тока не знаю что задавать в гугле).

Намедни с торентов накачал уйму ромов для эмулятора
Внимание вопрос: Как написать BASH-скрипт (или какой другой скрипт, питона к сожалению я не знаю), который бы: а) Создал папки от A до Z; б) разложил файлы согласно первой букве в имени файла в соответствующую папку (разумеется "А" и "а" кладётся в папочку "А"). Цифирные названия кладётся отдельно в отдельную папку.
Если есть любые идеи, с удовольствие выслушаю (можете даже меня направить гуглить по теме, тока не знаю что задавать в гугле).
no subject
Date: 2011-02-20 10:22 pm (UTC)no subject
Date: 2011-02-20 10:31 pm (UTC)no subject
Date: 2011-02-21 12:34 am (UTC)дешево и сердито:
for c in $(echo {A..Z} {0..9}); do [ -d $c ] || mkdir $c; echo "Dir -> $c"; for f in /usr/share/pixmaps/*; do de=$(basename $f|tr [:lower:] [:upper:]); [ $(echo $de|egrep -q ^$c; echo $?) = 0 ] && echo " cp $f $c/ "; done; done
не забудь указать свою директорию заместо /usr/share/pixmaps/ (звездочку оставь), и убрать echo "" перед cp $f $c/
no subject
Date: 2011-02-21 02:39 am (UTC)mkdir ~/dendyfiles
cd ~/dendyfiles
perl -e 'mkdir for "1", A..Z'
find /path/to/dendy/torrents -type f |perl -nle 'm{/(.)[^/]+$} && system "cp $_ " . ($1 le "A" ? "1" : uc $1)'
no subject
Date: 2011-02-21 06:43 am (UTC)no subject
Date: 2011-02-21 07:58 am (UTC)no subject
Date: 2011-02-21 10:16 pm (UTC)no subject
Date: 2011-02-21 09:33 am (UTC)no subject
Date: 2011-02-21 09:39 am (UTC)no subject
Date: 2011-02-21 10:00 am (UTC)@echo off
setLocal EnableDelayedExpansion
for %%i in (*.*) do (
set filename=%%i
set letter=!filename:~0,1!
mkdir !letter! 2> nul
move %%i !letter!
)
no subject
Date: 2011-02-21 12:31 pm (UTC)В общем кидаю "свои 5 копеек". ;)
ls | while read I; do DIR=`echo $I | awk '{c=substr($1,1,1); print c}'`; mkdir -p $DIR ; cp "$I" $DIR/; done
Если нет русских имен или кодировка не utf-8, а какая-нибудь однобайтная, типа koi8-r, то можно еще короче:
ls | while read I; do DIR=`echo $I | cut -c1`; mkdir -p $DIR ; cp "$I" $DIR/; done
Если не хочется, что бы папки были разные для заглавных и маленьких букв, то будет так:
ls | while read I; do DIR=`echo $I | awk '{c=substr($1,1,1); print tolower(c)}'`; mkdir -p $DIR ; cp "$I" $DIR/; done
P.S. Но к тому, что перл изучить полезно - целиком и полностью присоединяюсь! Очень полезная вещь для обработки текстов.
UPD: О! Знакомый подсказал еще один вариант с грепом, почему-то я о нем не подумал сразу. :)
ls|while read I; do DIR=`echo $I | grep -Eo '^.'`; mkdir -p $DIR ; cp "$I" $DIR/; done
no subject
Date: 2011-03-08 06:43 pm (UTC)#!/bin/bash
#мало ли чего у ваш штатно в sh?
for i in A..Z ; do
echo -n производим каталог имени $i,
mkdir $i
echo -n " далее переносим мусор с начальной буквой "$i
find . -iname $i* -type f -depth 1 -exec mv {} $i \;
echo ", пойдем дальше."
done