Re: Как можно собрать фай лы из множества директори й в одну ?

2010-02-04 Пенетрантность Oleksandr Gavenko

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: Как можно собрать фай лы из множества директори й в одну ?

2010-01-13 Пенетрантность Oleksandr Gavenko

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: Как можно собрать фай лы из множества директори й в одну ?

2010-01-13 Пенетрантность Nicholas

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: Как можно собрать фай лы из множества директори й в одну ?

2010-01-12 Пенетрантность Oleksandr Gavenko

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: Как можно собрать фай лы из множества директори й в одну ?

2010-01-12 Пенетрантность Nicholas

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: Как можно собрать фай лы из множества директори й в одну ?

2010-01-12 Пенетрантность Nicholas

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