Re: Как можно собрать фай лы из множества директори й в одну ?
On 2010.02.03 17:58, Alexander GQ Gerasiov wrote: Wed, 13 Jan 2010 11:53:31 +0200 Oleksandr Gavenkogave...@bifit.com.ua 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/95399/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 debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: Как можно собрать фай лы из множества директори й в одну ?
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 (без лишних зависимостей). -- С уважением, Александр Гавенко. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: Как можно собрать фай лы из множества директори й в одну ?
Yuriy Kaminskiy wrote: find -mindepth 2 -type f|prename 's,^\./,,;y,/,_,' Всем спасибо за варианты. Процетированный выше - просто шедевр - работает моментально и выглядит завораживающе. -- Sincerely, Nicholas -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: Как можно собрать фай лы из множества директори й в одну ?
On 2010.01.12 14:06, Nicholas 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 До работоспособности доведете сами )) Замечу подстанови можно зделать by sed )) -- С уважением, Александр Гавенко. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: Как можно собрать фай лы из множества директори й в одну ?
Alexander Galanin wrote Написать скрипт в пять строчек на шелле с использованием по назначению команды find. Пока испольую вот такую команду: find -type f -name '*.mp3' -exec cp '{}' 1 \; Но как изящно организовать переименование имя файла=имя директории+имя фйла пока не придумал. Кроме того у mv, в отличии от cp, нет опции -R, так что, видимо, надо использовать конструкцию for f in *.mp3 ; do ... ; done Буду благодарен за пример. -- Sincerely, Nicholas -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: Как можно собрать фай лы из множества директори й в одну ?
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 До работоспособности доведете сами )) Спасибо, буду эксперементировать. -- Sincerely, Nicholas -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org