Я создаю простой скрипт, который копирует все файлы из DIRECTORYA, которые не существуют в DIRECTORYB. Я делаю это с помощью команды cp:
cp -u DIRECTORYA/* DIRECTORYB
Я хотел бы также отправить электронное письмо администратору, в котором будут перечислены скопированные файлы.
Поэтому в идеале, прежде чем я запустил указанную выше команду, я хотел бы получить файлы, которые будут скопированы, и сохранить их в переменной для последующего использования при создании моего сообщения электронной почты.
Кто-нибудь может указать мне правильное направление? Я изучил использование grep, но не думаю, что это можно сделать с помощью команды cp?
-v
флаг, чтобы напечатать имена файлов по мере их копирования? Перенаправьте это в файл или непосредственно в переменную и используйте это для создания вашего сообщения.cp
команде есть опция,--attributes-only
позволяющая не копировать данные файлов, а только структуру каталогов и файлов.variable=$(cp -v ...)
захватывает стандартный вывод cp. См gnu.org/software/bash/manual/html_node/Command-Substitution.htmОтветы:
Я не думаю, что GNU
cp
может вам чем-то помочь, если вы хотите увидеть, что он будет делать, не действуя. Если вы хотите регистрировать файлы, которые были изменены, вы можете использовать-v
опцию:Вместо этого
cp
вы можете использовать rsync , который является гораздо более мощным и устанавливается практически везде, за исключением встроенных систем низкого уровня (и прост в установке там, где его нет по умолчанию).или
источник
Если вы хотели бежать
cp foo*bar whatever
, то бегитеecho foo*bar whatever
вместо этого.источник
cp -u
и он ищет вариант, подобный пробному запуску для cp.Согласно странице руководства ,
Эта функция объединяет два теста: один тривиальный для реализации в скрипте ( отсутствует ), а другой требует некоторой работы ( новее ). Вы можете сделать сценарий, который сообщает, что нужно использовать
comm
,diff
иtest
.Ни одна из стандартных
cp
утилит не предоставляет возможность запуска операции копирования в пробном режиме. Как предполагается,rsync
это способ сделать это с помощью общедоступной утилиты. Конечно,rsync
обычно используется для копирования на основе большего количества критериев, чем просто новые или отсутствующие (размер файла и временные метки также используются). Но это может быть сведено к справедливостиcp -u
.Для нестандартных утилит есть
copy
утилита, которую я написал (и, конечно, все еще использую) в конце 1980-х годов. Это, вероятно, было вдохновленоmake
утилитой, так как первый вариант, который я добавил, был-n
.Для данного примера это будет использовано так:
Дальнейшее чтение:
copy - утилита копирования файлов / каталогов
запись в журнале изменений за август 1988 года :
источник
Вы можете использовать команду diff. У меня есть работа, которая копирует некоторые файлы резервных копий каждый день. Некоторое время мне нужно проверить, все ли файлы скопированы, вот синтаксис:
и, конечно, если вы хотите скопировать их, используйте:
источник
Попробуйте вместо этого использовать rsync. Rsync прекрасно работает с локальными копиями и, безусловно, может делать то, что вы хотите, когда вы пробуете пятнадцать вариантов gazillion.
покажет вам все, что будет сделано, и
сделаю это.
источник