LinuxForum.Fans
Тема

Работа с файлами в bash

Автор: Own 10 сообщений 4255 просмотров
#353367

Привет!

Ситуация следующая- в директории имеется много однотипных файлов вида

text
obj01.pdb.pdb  
obj02.pdb.pdb 
obj03.pdb.pdb 
obj04.pdb.pdb 

итд

необходимо переименовать каждый файл в

text
name_1.pdb
name_2.pdb

итд

пока что пришло в голову

text
for x in obj*
do
cp ./$x  cp ./name_$x
done

но это просто добавляет приставку name к каждому файлу. Как все-таки сделать задуманное используя for? Как сделать тоже самое, извенив разрешение конечного файла (Например, в тхт)?

Буду так же благодарен за предоставленный туториал, где показаны примеры скриптинга в баше и работа с большим количеством данных.

Заранее спасибо

#353368

Выделить имя просто с помощью awk.

Пётр.

#353370
text
#!/bin/bash

for i in `ls *.pdb`; do mv "$i" "$(basename $i .pdb)" done

"Own" написал:
уду так же благодарен за предоставленный туториал, где показаны примеры скриптинга в баше и работа с большим количеством данных.

1. Advanced Bash-Scripting guide
2. Искусство написания сценариев Bash [openNET]
3. Advanced Bash Scripting guide [rus-linux]
4. google://bash scripting guide

#353384

ls в операторах баша - это пять !

#353398
smaharbA написал:
ls в операторах баша - это пять !

Не, ну под****** вы горазды, тут все это поняли, а вот объясять кто будет?
ы. Тут лучше использовать find pattern или rename, вот этот пример смотрите.

#353401

Не совсем понял, что делает

mv "$i" "$(basename $i .pdb)"

В таком ключе команда убирает повторяющееся pdb с конца файла. ПРи этом если заменить mv на cp, указав другую папку,
cp "$i" "./result/$(basename $i .pdb)"
то в results копируются две копии каждого исходного файла с .pdb и вообще без разрешения.


Можно примеры в этом же ключе
1) как изменить разрешение всех файлов с pdb на txt, сохранив имена файлов?
2)как изменить имена (на 1 2 3 4 5 6 итд), сохранив разрешение ?


Спасибо)

#353407
"Own" написал:
Можно примеры в этом же ключе

Гугл +
linux+rename+examples
linux+find+examples+wildcards/sed/pattern
итп...
тыц.

#353416

Можно и средствами bash, например:

text

#!/bin/bash

IFS="." declare -a arr=(na.b.c) echo ${arr[0]} ${arr[1]} ${arr[2]}

Будут напечатаны
na b c

Пётр.

#353915
text
for i in /usr/lib/*.so*; do echo $i; done

не нужен лс в баше

zenon - как там дела с определением пути скрипта, все еще Ваша система source xxx выдает $0 == xxx ?

#353920

автор

text
cd; touch obj01.pdb.pdb obj02.pdb.pdb obj03.pdb.pdb; i=1;for x in o*.pdb; do cp "${x}" name_$[i++].${x##*.}; done
Войдите или зарегистрируйтесь, чтобы ответить.