LINUX.ORG.RU

Помогите написать простенькую програмку на Bash


0

0

Доброго времени суток!

Ребята, люди добрые помогите у кого есть лишних 5 минут Вашего драгоценного времени!

Очень нужна простенькая программа на языке Bash? которая будет делать следующее: При запуске скрипта делает следующее:

Ищет в директории1 файл с расширением .one1 пытается найти с таким же именем только с расширением .one2 если такая пара найдена мувит ОБА файла в директорию2 , меняет права на этих файлах на 777.

Спасибо Вам большое!

find dir1 -type f -name \*.one1 | \
-printf 'test -f "`basename -s one1 {}`.one2" && install `basename -m 0777 -s one1 {}`.(one1|one2) dir2' | \
sh -s

не проверял, наверняка не сработает если в имени есть пробел, надеюсь идея понятна

MKuznetsov ★★★★★
()

ls /dir1 | grep '\.one1\|\.one2$' | sed 's/\.[^.]*$//' | sort | awk '(prev == $0) { print } { prev=$0 }' | awk '{ printf "mv -f %s.one1 %s.one2 /dir2\nchmod 777 /dir2/%s.one1\nchmod 777 /dir2/%s.one2\n",$0,$0,$0,$0 }' | sh -s

dilmah ★★★★★
()

Спасибо Вам большое!

Единственное хотел уточнить, в последней версии программы, она будет работать с любыми именами файлов? ( состоящих их пробелов, букв, цифр)

Спасибо!

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

Вот какие ошибки выдает... awk: string too long near line 1 awk: syntax error near line 1 awk: illegal statement near line 1

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

вот для любых имен файлов вариант:

ls /dir1 | grep '\.one1$\|\.one2$' | sed 's/\.[^.]*$//' | sort | awk '(prev == $0) { printf "%s.one1\n%s.one2\n",$0,$0 } { prev=$0 }' | tr \\n \\0 | xargs -0 -n1 sh -c 'mv -f /dir1/"$1" /dir2; chmod 777 /dir2/"$1"' xxx

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

странно, но программа не работает, при попытке понять на каком месте, она не работает, вот что получается сразу же поле первого grep ls /dir1 | grep '\.one1$\|\.one2$' выдает пустой результат, хотя файлы с таким расширением есть. В чем может быть дело?

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

> В чем может быть дело?

у меня работает.. Приведи копи-паст команд из терминала, содержимое директории -- так легче будет понять.

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

xargs: illegal option -- 0 xargs: Usage: xargs: [-t] [-p] [-e[eofstr]] [-E eofstr] [-I replstr] [-i[replstr]] [-L #] [-l[#]] [-n # [-x]] [-s size] [cmd [args ...]]

Вот теперь что пишет, без опции -0 убивает директорию1 и копирует ее содержимое в директорию2...

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

another try without xargs -0:

ls /dir1 | grep '\.one1$\|\.one2$' | sed 's/\.[^.]*$//' | sort | awk '(prev == $0) { printf "%s.one1\n%s.one2\n",$0,$0 } { prev=$0 }' | while read -r FILE; do mv -f /dir1/"$FILE" /dir2; chmod 777 /dir2/"$FILE"; done

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

Спасибо Вам большое dilmah! Все заработало корректно :) Куда пиво везти ? :)

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