LINUX.ORG.RU

Bash

 


0

1

Приветствую! Интересует вопрос, как сделать следующе: есть 100 файлов с названиями типа file[1-100], как мне в каждый из этих файлов добавить строку с цифрами из его имени? Например в файл «file1» добавить строку «1», а в файл file20 добавить строку «20». Спасибо

Открыть любую статью про bash, почитать про циклы.

Kroz ★★★★★ ()

не забудь пометить тему как решенную.

удачи, друх.

mos ★★☆☆☆ ()
for F in file* ; do echo "$F" >>$F ; done
anonymous ()
Ответ на: комментарий от anonymous

с названиями типа

cut -c5-15

представляется более адекватным:

grep -o '[[:digit:]]*$'

anonymous ()
for file in `ls`
do
  num=$(echo $file | sed 's/file//g')
  echo $num >> $file
done
mystery ★★ ()
Ответ на: комментарий от mystery

for file in `ls`; do num=$(echo $file | sed 's/file//g')

Вот с одной стороны смотришь на товарищей, что посылают ОПа с его домашними заданиями, и думаешь что они правы, а с другой стороны видишь, какой кошмар генерируют другие, — и понимаешь, что посылы не работают.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Не говори.

for i in {1..100}; do echo $i >> file$i; done
anonymous ()
Ответ на: комментарий от Zmicier

А что в моем коде не так? Ну можно использовать variable expression, но можте у ОПа 2 или 3 баш, или вообще dash

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

`ls`

полная жуть

echo $file

неокавыченный - не очень хорошо

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

`ls`

А что не так? Ну можно $(ls)
Не все sh на * выдают список верно

echo $file

ну можно echo «$file»; но тут смысла экранирования нету, все файлы заведомо известно как называются

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

названиями типа

известно как называются

задача неявно переформулируется в строгую форму (чем стрoже формулировка, тем более плавающим может быть решение; как на более узкому классе функций можно ввести больше функционалов). но даже если сработает в частном случае - прививается вредный подход

А что не так?

этот выхлоп очень не рекомендуется для парсинга, либо «find -exec» либо «globbing», неплохо написано здесь: http://mywiki.wooledge.org/BashPitfalls#for_i_in_.24.28ls_.2A.mp3.29

anonymous ()
Ответ на: комментарий от mystery

Зато можно вот так

for file in `ls -a`
Тогда ещё скрытые обработать можно.

u0atgKIRznY5 ()

Нехорошо называть темы, не поясняя суть. Да еще дублируя тэг. Обычно такое нарушает правила...

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от u0atgKIRznY5

и будет еще . и .., надо будет резать
Можно вообще сделать ls -l, cut-нуть и echo $line|while read line; do rename $line;done :-D

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

Пи..., тебе и товарищу выше, аноним написал что так делать нежелательно.
Если очень хочется ls, можно сделать так:

ls | while read filename ; do something "${filename}" ; done

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

Дошло! Товарищи Ъ или не умеют в английский.
Тогда коротко о чём там:

cd /tmp
mkdir test
touch "file one" "file two"
for fname in $(ls) ; do echo "${fname}" ; done
ls | while read fname ; do echo "${fname}" ; done
И сравнить результаты.

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