LinuxForum.Fans
Тема

Несложный вопрос на тему копирования

Автор: machulkin 29 сообщений 4352 просмотров
#89922

Добрый день, я новичок, и давно не занимался подобными вещами, как написание скриптов.
Смысл такой, во FreeBSD нужно откопировать достаточно большое число файлов, сделать копирование нужно быстро, заблаговременно подготовившись к нему и назначенному часу.
Пришла в голову мысль написать скрипт. Так, вот главный вопрос: как сделать проверку на успешное копирование – с выводом на экран или в файл соответствующего сообщения о удачном или не удачном копировании.
В поиске нашел только информацию :
СТАТУС ЗАВЕРШЕНИЯ
Утилита cp возвращает 0 в случае успешного завершения и >0 в случае воз-
никновения ошибки.
- как вытащить это значение для последующей проверки???? и куда она его возвращает.
С Уважением.
Не бейте слишком сильно.

#89935
text

cp -a FILE_1 FILE_2 > /dev/null 2>&1 && echo "All OK" || echo "Copy process finished with ERROR"

P.S. Если планируете и дальше писать скрипты, прочитайте обязательно ABS.

#89943

Lupo Alberto, эм, а если у меня к примеру есть уже такой файл в каталоге и "cp" просит переписать файл или нет? тогда этот вариант не прокатывает, так как мы повиснем в бесконечном ожидании подтверждения пользователя сказать "да", значит надо будет указать доп ключик к "cp" , далее рассматриваем: вместо ALL OK указываем ALL jkashdakhd, и о чудо у нас все ок , или я что то не догоняю, и вообще ключик -a это же:

-a, --archive
По возможности сохраняет структуру и атрибуты исходных файлов прикопировании (но не сохраняет структуру каталогов). Эквивалентно з
аданиюопций -dpPR.


p.s. может не так что либо понял? если это так то поправь :-)

#89951

i2ks, это был только каркас команды. Я для бэкапов использую либо tar, либо rsync.

i2ks написал:
далее рассматриваем: вместо ALL OK указываем ALL jkashdakhd, и о чудо у нас все ок , или я что то не догоняю

Опять же повторюсь, это только пример, связка && echo "ALL OK" просто выведет в консоль ALL OK в случае удачного завершения предыдущей команды.
Чтобы команда cp не переписывала существующие файлы, у неё есть опция

text

...
 -b, --backup
              Делать резервные копии файлов, которые будут перезаписаны или удалены.
...
#89955
Lupo Alberto написал:
это был только каркас команды. Я для бэкапов использую либо tar, либо rsync.

вот это по нашему smile
Lupo Alberto, Участников форума очень много, вот поэтому и возникли вопросы, бывают же люди которые просто выполнят copy/paste, а потом будет масса вопросов почему у меня это или это не работает должным образом smile

#89959

cp -a FILE_1 FILE_2 > /dev/null 2>&1 && echo "All OK" || echo "Copy process finished with ERROR

- этот вариант нравится больше и больше подходит - но не Работает к сожалению.

выдает ошибку по : $1 : ambiguous redirect
и далее печать echo (Copy process finished with ERROR)

Что делать?

#89961

Не нужен бекап - мне нужно копирование, с заменой если файл есть.
Спасибо за внимание - признателен. Надеюсь воспользовавшись советами все же получится сделать, что бы работало)

#89969
machulkin написал:
cp -a FILE_1 FILE_2 > /dev/null 2>&1 && echo "All OK" || echo "Copy process finished with ERROR

- этот вариант нравится больше и больше подходит - но не Работает к сожалению.

выдает ошибку по : $1 : ambiguous redirect
и далее печать echo (Copy process finished with ERROR)

Что делать?

Вы последнюю кавычку не забыли?
Покажите

text

which cp

Чтобы файлы перезаписывались «без вопросов»:
[console]
cp -af FILE_1 FILE_2 > /dev/null 2>&1 && echo "All OK" || echo "Copy process finished with ERROR"
[/console]

#89971

В целом достаточно $$ echo "All ok" - ошибку CP выдает на экран.
В остальном, все ковычки стоят - не работает.
Рождается вопос - после выполнения как прописать - выход по нажатию клавиши ?
С уважением.
Читаю по Вашему совету ABC - замечательная штука. Очень благодарен.

#89973

machulkin, будьте более внимательны, у меня всё работает, только что проверил.
В некоторой степени это зависит от настроек оболочки.
Покажите

text

which cp
#89979

набрал which cp
выдал: /bin/cp

#89980

как картинку показать не понмаю ) для этого надо куда то в сеть скинуть ее п пото ссыкой вставить?

#90002

Всё должно работать:

text

lupo@gentoo-laptop ~ $ mkdir test
lupo@gentoo-laptop ~ $ cd test/
lupo@gentoo-laptop ~/test $ echo 123 > FILE_1.txt
lupo@gentoo-laptop ~/test $ cat FILE_1.txt 
123
lupo@gentoo-laptop ~/test $ cp -af FILE_1.txt FILE_2.txt > /dev/null 2>&1 && echo "All OK" || echo "Copy process finished with ERROR"
All OK
lupo@gentoo-laptop ~/test $ ls -l
итого 8
-rw-r--r-- 1 lupo lupo 4 Окт 20 11:33 FILE_1.txt
-rw-r--r-- 1 lupo lupo 4 Окт 20 11:33 FILE_2.txt
lupo@gentoo-laptop ~/test $ cat FILE_2.txt 
123
lupo@gentoo-laptop ~/test $ echo 456 >> FILE_1.txt 
lupo@gentoo-laptop ~/test $ cat FILE_1.txt 
123
456
lupo@gentoo-laptop ~/test $ cp -af FILE_1.txt FILE_2.txt > /dev/null 2>&1 && echo "All OK" || echo "Copy process finished with ERROR"
All OK
lupo@gentoo-laptop ~/test $ cat FILE_2.txt 
123
456
#90004

machulkin, какая у вас командная оболочка?
Покажите

text

echo $SHELL

Покажите её файлы инициализации. В них на команду cp нигде алиасы не настроены случайно?

#90006

echo $SHELL

/bin/csh


И билин перестало работать вот, так:
cp -a FILE_1 FILE_2 && echo "All OK" || echo "Copy process finished with ERROR"

выдает сообщене : OK - не является директорией ....
а дальше:
Copy process finished with ERROR
и не копирует сответсвено.

Прости, у тебя есть аська? моя 416821493

#90010
machulkin написал:
Прости, у тебя есть аська? моя 416821493

Только jabber wink
Попробуйте поменять кавычки

text

cp -a FILE_1 FILE_2 && echo 'All OK' || echo 'Copy process finished with ERROR'

или так:

text

cp -a FILE_1 FILE_2 && echo All_OK || echo Copy_process_finished_with_ERROR
#90016

уф ))) нет не получается.
Причем однозначно - вот 10 мнут назад работало!!!!
#!/usr/local/bn/bash
cp -i -v /user/home/file /user/home/file2 $$ echo 'ALL OK' || echo 'error'
exit

ответ на исполнение:
cp: ALL OK is not a directory
error

#90018

Я просил внимательно читать wink
У меня &&, а не $$!

#90019

черт)))) экранчик маленький. щас буду пробовать. oO

Войдите или зарегистрируйтесь, чтобы ответить.