LINUX.ORG.RU

>ls *

Не взлетит, если в текущем каталоге есть подкаталоги. Тогда либо find, либо просто ls.

IFS='
'
for i in `ls -1`; do echo "$i" $[j++]."${i/[^.]*./}".temp; done

anon_666
()

> ls *

не ясен сакральный смысл, может, лучше: (как упомянули выше) find или printf '%s\n' */*

«mv %s %02d.tmp\n» .. | sh

Брр... в awk есть `system(...)'

покорректировать

пример: awk -F / '{a=$NF; NF--; print $0 «/11.» a}' + sprintf для форматирования + system

еще есть find и nl:

пример: find -mindepth 2 -type f | nl -w2 -nrz | while read n l; do echo $n:$l; done

+ ${l%/*} + ${l##... или basename / dirname

ps...

perl-rename -n '$i++; s:(.*)/(.*):\1/$i.\2.tmp:' **/* - без форматирования ибо лень

n01r ★★
()
Ответ на: комментарий от anon_666

Передел вот так:

 IFS='
'; j=1; for i in `ls | sort -g`; do echo "$i" $[j++]."${i/[^.]*./}".temp; done



чтобы ls прально сортировал фалый sort -g. Есть проблема не хватает нуля перед чмслами меньше 10.
Andaril
() автор топика
Ответ на: комментарий от anon_666

anon_666>

mv "01.JPG" 01."JPG".tmp
mv "020.JPG" 02."JPG".tmp
mv "02.JPG" 03."JPG".tmp
mv "038.JPG" 04."JPG".tmp
mv "03.JPG" 05."JPG".tmp
mv "043.JPG" 06."JPG".tmp
mv "04.JPG" 07."JPG".tmp
mv "05.JPG" 08."JPG".tmp
mv "06.JPG" 09."JPG".tmp

поправил на:

ls * | sort -g | awk '{
  z=$0
  sub("[^.]+\\.", "", z)
  printf("mv \%s\ %02d.\%s\.tmp\n", $0, NR, z)
}'

выдает:

awk: cmd. line:3: warning: escape sequence `\%' treated as plain `%'
awk: cmd. line:3: warning: escape sequence `\ ' treated as plain ` '
awk: cmd. line:3: warning: escape sequence `\.' treated as plain `.'
mv 01.JPG 01.JPG.tmp
mv 02.JPG 02.JPG.tmp
mv 03.JPG 03.JPG.tmp
mv 04.JPG 04.JPG.tmp
mv 05.JPG 05.JPG.tmp
mv 06.JPG 06.JPG.tmp

Andaril
() автор топика

прошу прощения забыл добавить в скрипт

 sort -g 
после ls.

Andaril
() автор топика
Ответ на: комментарий от n01r

n01r>

я только начал знакомство с awk. буду разбираться.

Andaril
() автор топика
Ответ на: комментарий от Andaril

Andaril>

поправил, теперь без ошибок


ls * | sort -g | awk '{
  z=$0
  sub("[^.]+\\.", "", z)
  printf("mv %s %02d.%s.tmp\n", $0, NR, z)
}'
Andaril
() автор топика
Ответ на: комментарий от anon_666

Да не понятно зачем я поставл *. Нужно что бы он менял только файлы и тут хорошо бы иметь find, но он выдает ./*, как решать, пока просто удаляю все внутренние директории.

Andaril
() автор топика
... | awk -F'.' '{printf("mv \"%s\" \"%02d.tmp.%s\"\n", $0, NR, $NF)}' | sh
sdio ★★★★★
()
ls -p | sed '/\//d' | sort -g | awk -F'.' '{printf("mv \"%s\" \"%02d.tmp.%s\"\n", $0, NR, $NF)}'

Happy end!

Andaril
() автор топика
Ответ на: комментарий от Andaril

> А можно ли с помощью find отыскать картинки по mime?

А пройти по ссылке, которую кинул `sdio' (в уже поднятой теме) и прочитать его сообщения?

n01r ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.