Форум программистов, компьютерный форум, киберфорум
Наши страницы
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
trung123
0 / 0 / 1
Регистрация: 25.04.2014
Сообщений: 86
1

Скопировать в заданный каталог исполняемые файлы из другого

17.04.2017, 21:15. Просмотров 377. Ответов 14
Метки нет (Все метки)

в задание надо написать скрипт,копирующий в заданный каталог исполняемые файлы из другого заданого каталога.Имена каталогов задаются в абсолютной форме.

Bash
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
echo $1
echo $2
find $1 -type f
while [ -f $1 ]
do 
if [ -x $1 ]
then cp $1 $2
fi
done
почему то он только ищет файлы но не копируют их в другую папку
можете подсказать в чем ошибку?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2017, 21:15
Ответы с готовыми решениями:

Как выбрать файлы с правом записи и скопировать их в другой каталог?
добрый день, мне нужно написать скрипт, вот задание: Проверить, установлено ли...

Как искать файлы, задавая имя и каталог?
Ребята, помогите... мне нужно сделать поиск файлов, каталог и имя задаем. Вот...

Как собрать файлы из подкаталогов в один каталог, переименовав одинаковые?
—Здр.Все! —Нужен скрипт или просто команда для терминала. —Задача собрать...

Как создать архив каталога пользователя, не включая скрытые файлы и каталог lost?
Спасибо! Вот ещё вопрос, если не сложно ответить. Скрипт должен создавать...

Скопировать рекурсивно файлы с созданием поддиректорий
Нужно скопировать рекурсивно все файлы find ./ | grep -v CVS | xargs -n 1 -I %...

14
nimazzzy
Заблокирован
17.04.2017, 21:43 2
Почему просто с find не использовать опцию -exec для копирования и -executable для поиска исполняемых файлов?
0
trung123
0 / 0 / 1
Регистрация: 25.04.2014
Сообщений: 86
17.04.2017, 21:53  [ТС] 3
Код
#!/bin/bash
echo $1
echo $2
for f in $1/*
do
   if [ -x $f ]
      then
           cp $f $2
   fi
done
я кое-как исправил
файлы вроде копируется
но почему при запуске скрипта он пишет что
Код
cp:пропускается каталок <<   >>
0
nezabudka
733 / 298 / 116
Регистрация: 28.06.2015
Сообщений: 764
Записей в блоге: 13
17.04.2017, 22:19 4
Может так?
Bash
1
2
3
4
5
#!/usr/bin/env bash
if [[ $# < 2 ]]; then
    exit
fi
find $1 -type f -executable -exec cp {} $2 \;
Добавлено через 22 минуты
trung123,
Bash
1
 [[ -f $f && -x $f ]]
1
trung123
0 / 0 / 1
Регистрация: 25.04.2014
Сообщений: 86
17.04.2017, 22:22  [ТС] 5
-executable -exec cp {} $2 \
а сможете объяснить,пжлс эти команды?
0
nimazzzy
Заблокирован
17.04.2017, 22:29 6
trung123, man не читаем по религиозным соображениям?
0
nezabudka
733 / 298 / 116
Регистрация: 28.06.2015
Сообщений: 764
Записей в блоге: 13
17.04.2017, 22:32 7
trung123, По условию вам необходимо найти исполняемые файлы, за что отвечает опция -executable.
Опция -exec передает управление внешней команде cp, подсатановка найденного файла происходит внутри фигурных
скобок и комбинация \; завершающая последовательность. Ваш второй код тоже рабочий, но необходима дополнительная
проверка на то что файл не является каталогом. Повидимому у вас есть вложенные папки.
1
Marinero
Модератор
Эксперт NIX
2141 / 1722 / 584
Регистрация: 02.03.2015
Сообщений: 5,633
18.04.2017, 00:02 8
Цитата Сообщение от nezabudka Посмотреть сообщение
find $1 -type f -executable -exec cp {} $2 \;
Bash
1
find "$1" -type f -executable -exec cp -t "$2" {} +
1
trung123
0 / 0 / 1
Регистрация: 25.04.2014
Сообщений: 86
18.04.2017, 11:25  [ТС] 9
а вы не сможете доработать мой вариант?
0
Marinero
Модератор
Эксперт NIX
2141 / 1722 / 584
Регистрация: 02.03.2015
Сообщений: 5,633
18.04.2017, 12:00 10
Bash
1
2
3
4
5
6
7
8
#!/bin/bash
echo $1
echo $2
for item in "$1"/* ; do 
    if [ -f "$item" -a -x "$item" ] ; then
        cp "$item" "$2"
    fi
done
0
trung123
0 / 0 / 1
Регистрация: 25.04.2014
Сообщений: 86
18.04.2017, 13:09  [ТС] 11
почему -то он написал что
Код
строк 5:слишком много аргументов
0
Marinero
Модератор
Эксперт NIX
2141 / 1722 / 584
Регистрация: 02.03.2015
Сообщений: 5,633
18.04.2017, 15:38 12
Некоторые версии test не понимают ключи -and|-or. Стоит посмотреть
Bash
1
man/help test
Можно попробовать разделить
Bash
1
if [ -f "$item" ] && [ -x "$item" ]
Или в общем случае можно сделать вложенные условия
Bash
1
2
if [ -f "$item" ] ; then
    if [ -x "$item" ] ; then
1
trung123
0 / 0 / 1
Регистрация: 25.04.2014
Сообщений: 86
18.04.2017, 18:33  [ТС] 13
он в принципе работает
но почему он только копирует файлы в каталоге ,а файлы в подкаталоге он пропускает
0
Marinero
Модератор
Эксперт NIX
2141 / 1722 / 584
Регистрация: 02.03.2015
Сообщений: 5,633
18.04.2017, 18:43 14
Цитата Сообщение от trung123 Посмотреть сообщение
файлы в подкаталоге
Никто не говорил про подкаталоги. Тогда скрипт с find больше подходит. Или строит рекурсию.
0
helter
Эксперт по математике/физике
3806 / 2828 / 307
Регистрация: 12.03.2013
Сообщений: 5,164
19.04.2017, 11:42 15
trung123, я напишу на другой командной оболочке — не bash, а zsh. На bash-е работать не будет, но может кому-нибудь будет любопытно.
Bash
1
2
3
#!/bin/zsh
 
cp $1/**/*(*) $2
Шаблон ** рекурсивно матчит директорию и все поддиректории, а квалификатор (*) выбирает только исполняемые файлы.
0
19.04.2017, 11:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2017, 11:42

Скопировать файлы созданные в чётные месяцы
Скопировать в подкаталог '000' своего домашнего каталога все файлы из каталога...

Скопировать файлы по списку из текстового файла в другую папку
В общем, есть файл, к примеру, target_files, в котором содержатся пути к...

Как скопировать файлы, фильтруя их имена по списку номеров из файла?
Добрый день, форумчане! Подскажите пожалуйста, как мне написать такую штуку:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru