Bash-скрипты. Урок 7


Всем привет!
Тут предыдущий урок
Поехали)

Задача:
Найти файлы содержащие “P2014” и скопировать эти файлы в другую директорию, а также создать файл журнал с логированием откуда и куда копировались файлы.

Решение:
grep -lr "2014" ./cups | xargs -i cp -fvp '{}' ./dirtemp >> ./cp-grep-file.log
grep -Ilr "2014" ./cups | xargs -i cp -fvp '{}' ./dirtemp >> ./cp-grep-file.log – без бинарных файлов

Пояснение:
1. Ключи grep
-l – подавляет нормальный вывод; вместо него печатает имя для каждого файла ввода, в котором найдено совпадение. Сканирование (конкретного файла) остановится при первом найденном совпадении.
-r – рекурсивно считывать все файлы в каждой директории.
-I – обрабатывать бинарный файл, как если бы он не содержал подходящих данных, т.е. не обрабатываем бинарные файлы.

2. xargs
Эта утилита считывает данные из выходных данных другой команды или стандартного потока ввода (по умолчанию) и выполняет команду, переданную в качестве аргумента.
Синтаксис: [команда-источник данных] | xargs [опции xargs] [команда-аргумент]
-i – (--replace=[R]) заменить R в НАЧАЛЬНЫХ-АРГУМЕНТАХ именами, прочитанными из стандартного ввода. Если R не указан, то предполагается {}. Аналогично конструкции -I '{}'.

3. cp
Утилита позволяет полностью копировать файлы и директории.

cp -fvp '{}' ./dirtemp
-f – (--force) перезаписывать существующие файлы.
-v – (--verbose) выводить подробную информацию в ходе выполнения. Эту информацию мы и будем записывать в лог файл.
-p – сохранять владельца, временные метки и флаги доступа при копировании.

>> ./cp-grep-file.log – весь вывод записывать/дописывать в файл журнала.

Добавить комментарий