On 2010.02.03 17:58, Alexander GQ Gerasiov wrote: > Wed, 13 Jan 2010 11:53:31 +0200 > Oleksandr Gavenko<[email protected]> wrote: > >> On 2010.01.12 16:23, Nicholas wrote: >> > Oleksandr Gavenko wrote: >> >> find $dir -type f -name "*.[ch]" | while read file; do \ >> >> fname=`basename $file` или fname=${file##*/}; \ >> >> dname=${file%/*}; \ - удаляем имя >> >> dname=${dname##*/}; \ - получаем последний каталог >> >> mv $file куда-вам-угодно/$dname_$fname; \ >> >> done >> > >> > Спасибо, буду эксперементировать. >> > >> >> Приятность конструкции >> >> find . -type f .... | while read; do ...; done >> >> в возможности обрабатывать только часть файлов, >> удовлетворяющих сложному условию: >> >> find . -type f .... | while read; do \ >> if test/grep/[ $var = bad ]/bla-bla-bla; then \ >> continue; \ >> fi; \ >> полезная-работа; \ >> done >> >> и полное соответствие POSIX (без лишних зависимостей). > И радостное бл******** на перво же файле с \n в имени. > Есть такое. Ранний UNIX это set of text oriented utils. Строка - единица в обработке информации.
К именам файлов наверно нужно подходить как к индексам БД - нужны лишь для различия одного от другого. Когда появился код для обработки wildcard - стало возможным пихать теги имена в файлов (*.c, *.txt, *.tex). Эта концепция хорошо ложится в придуманую модель именования файлов. Но вот когда пользователям дали возможность ставить пробелы, национальные символы, управляющие символы - никто не заботился о совместимости со старым кодом и стандартами (( Эти "тупые" пользователи ничего не знают о кодировках, переносимости, спецсимволах. Не читали "limits.h", где написан MAX_PATH. И вообще http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_230 In the shell command language, a word consisting solely of underscores, digits, and alphabetics from the portable character set. The first character of a name is not a digit. PS. Обожаю пробелы, ведь благодаря им можно узнать столько нового о shell и IFS. -- С уважением, Александр Гавенко. -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

