1

Доброго времени суток уважаемые форумчане. Недавно начал работать с ком. строкой на новом для себя уровне и завис на решении задачки.

ls -d 1-81/*.jpg | sed 's/.*-//g'

нужно обрезать имена файлов в каталогах, в данном примере у меня получилось вывести нужный мне результат на экран. Но как это теперь переименовать файлы я никак не пойму((

2

Возможно, "man rename" поможет движению в правильном направлении?

3

К сожалению данной команды нет в моем распоряжении на сервере, где нужно производить переименовывание ((

4

Тогда mv. Уж она должна быть.

Пётр.

Пётр.

5

если с помощью sed'а, то решается чем-то вроде:
ls *.jpg | sed 's!\(*.jpg\)!mv \1 my-\1!ge'

если средствами bash'а, то как-то так:
ls *.jpg | wihle read f; do mv "$f" "my-$f"; done

ЗЫ: вместо ls'а лучше использовать find.

95% процентов проблем находятся между клавиатурой и стулом.

6

Fat-Zer пишет:

ЗЫ: вместо ls'а лучше использовать find.

а почему вы не использовали find???

Вообще -- странно, чем лучше

и да, примеры: http://emulek.github.io/sed/ch04s12.html

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

7

победил, решалось:

for file in *; do
            mv "$file" "`sed 's/.*-//' <<< "$file"`"; 
        done


Но появилась новая задачка. нужно в текстовом файле qqq-www-rrr-vvv|2-3/
заменить все "-" на пробел до "|"  тоесть после пайпа не трогать. перекопал много. ответа нет



З.Ы.

Fat-Zer пишет:

ls *.jpg | wihle read f; do mv "$f" "my-$f"; done

не wihle , а while ))))

8

sbars пишет:

Но появилась новая задачка. нужно в текстовом файле qqq-www-rrr-vvv|2-3/
заменить все "-" на пробел до "|"  тоесть после пайпа не трогать. перекопал много. ответа нет

ну сразу видно, что вы не читали мою книжку с картинками...

echo "qqq-www-rrr-vvv|2-3/---"|\
sed 'h;s/|.*//;s/-/ /g;G;s/\n.*|/|/'
qqq www rrr vvv|2-3/---
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

9

sbars пишет:

mv "$file" "`sed 's/.*-//' <<< "$file"`";

замените `` на $(). Оно работает только в баше, за то допускает вложенность.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

10

drBatty пишет:

ну сразу видно, что вы не читали мою книжку с картинками...

К сожалению не пускает туда, один раз попал, но потом начало перекидывать через трафикброкера на левые сайты.

echo "qqq-www-rrr-vvv|2-3/---"|\
sed 'h;s/|.*//;s/-/ /g;G;s/\n.*|/|/'
qqq www rrr vvv|2-3/---

у меня "qqq-www-rrr-vvv" - эта часть меняется для каждой строки

тоесть задача "заменить в каждой строке '-' на пробел до пайпа"

11

sbars пишет:

К сожалению не пускает туда, один раз попал, но потом начало перекидывать через трафикброкера на левые сайты.

вот github http://emulek.github.io/sed/index.html

sbars пишет:

    qqq www rrr vvv|2-3/---

у меня "qqq-www-rrr-vvv" - эта часть меняется для каждой строки

тоесть задача "заменить в каждой строке '-' на пробел до пайпа"

ну моя команда именно так и делает:

1. сохраняет строку

2. вырезает всё после |

3. меняет все "-"

4. склеивает строку с копией

5. вырезает из результата склейки кусок до |

Что вам не нравится? Можете сделать как-то по другому. ИМХО это самый простой и логичный способ (да, есть другие)

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)