Как проверить, какие файлы будут скопированы с помощью команды cp?

Я создаю простой скрипт, который копирует все файлы из DIRECTORYA, которых нет в DIRECTORYB. Я делаю это с помощью команды cp:

cp -u DIRECTORYA/* DIRECTORYB 

Я хотел бы также отправить электронное письмо администратору, в котором будут перечислены файлы, которые были скопированы.

Поэтому, прежде чем я запустил указанную выше команду, я хотел бы получить файлы, которые будут скопированы, и сохранить их в переменной для последующего использования при создании моего сообщения электронной почты.

Может ли кто-нибудь указать мне в правильном направлении? Я изучил использование grep, но я не думаю, что это можно сделать с помощью команды cp?

5 Solutions collect form web for “Как проверить, какие файлы будут скопированы с помощью команды cp?”

Согласно странице руководства ,

-u , --update
копировать только тогда, когда файл SOURCE является более новым, чем файл назначения или когда отсутствует файл назначения

это функция, которая сочетает в себе два теста, один тривиальный для реализации в сценарии ( отсутствует ) и один требует некоторой работы ( новее ). Вы можете создать скрипт, который сообщает, что нужно использовать с помощью comm , diff и test .

Ни одна из стандартных утилит cp обеспечивает возможность сухого копирования операции копирования. Как было предложено, rsync – это способ сделать это с помощью общедоступной утилиты. Конечно, rsync обычно используется для копирования на основе большего количества критериев, чем только более новые или отсутствующие (также используются размер файла и временные метки). Но это можно свести к выполнению только cp -u .

Для нестандартных утилит есть утилита copy которую я написал (и, конечно, все еще использую) в конце 1980-х годов. Вероятно, это было вызвано утилитой make , так как первый вариант, который я добавил, был -n .

В данном примере он будет использоваться следующим образом:

 $ copy -nvU DIRECTORYA/* DIRECTORYB ** copy DIRECTORYA/foo to DIRECTORYB/foo ** 1 file would be copied, 616 bytes 

Дальнейшее чтение:

  • копия – файл / утилита копирования каталога

    -n отключает фактическое создание или изменение файлов и (в зависимости от уровня детализации) показывает эффект, который будет иметь команда copy .
    -u копирует файлы только в том случае, если их размер или дата модификации отличаются, и ссылки, только если текст ссылки отличается.
    -U копирует только файлы, которые новее, чем пункт назначения, или которые не существуют в пункте назначения.

  • запись в журнале изменений с августа 1988 года :

      1988-08-16    
             * src / copy / src / copy.c: добавлены опции «-d» и «-n».
    

Если вы хотите запустить cp foo*bar whatever , тогда вместо этого запустите echo foo*bar whatever .

Я не думаю, что у GNU cp есть что-нибудь, чтобы помочь вам, если вы хотите увидеть, что он будет делать, не действуя. Если вы хотите зарегистрировать файлы, которые были изменены, вы можете использовать опцию -v :

 cp -puv DIRECTORYA/* DIRECTORYB >copy.log 

Вместо cp вы можете использовать rsync , который намного более мощный и установлен почти повсеместно, за исключением недорогих встроенных систем (и их легко установить там, где он отсутствует по умолчанию).

 rsync -aun DIRECTORYA/* DIRECTORYB >what-would-be-done.txt 

или

 rsync -auv DIRECTORYA/* DIRECTORYB >copy.log 

Вы можете использовать команду diff. У меня есть работа, которая копирует некоторые файлы резервных копий каждый день. некоторое время мне нужно проверить, скопированы ли все файлы, вот синтаксис:

 diff /file1/ /file2/ 

и, конечно, если вы хотите их скопировать, используйте:

 cp -u /file1/* /file2 

Вместо этого используйте rsync. Rsync отлично работает на локальных копиях и, безусловно, может делать то, что вы хотите, как только вы пробираетесь по пятнадцати вариантам газиллиона.

 rsync -avun DIRECTORYA/ DIRECTORYB 

покажет вам все, что будет сделано, и

 rsync -avu DIRECTORYA/ DIRECTORYB 

сделаю это.

  • SSH легко копирует файл в локальную систему
  • Копия USB висит некоторое время, когда достигает 100%
  • Копирование быстрее, чем cp?
  • Права на наследование файлов каталога, на которые он скопирован?
  • Как выполнить итерацию списка и скопировать файлы из machineB и machineC эффективно?
  • Переименование файлов после выталкивания файлов с одинаковыми именами с разных серверов
  • Изменить каталог без использования 'cd'
  • Нужен сценарий оболочки для копирования файлов с длинными именами и именами
  • Rsync, включают только определенные типы файлов, исключая некоторые каталоги
  • Перевод конфигурации rdist с несколькими корнями в rsync
  • rsync все каталоги, начинающиеся с определенной цифры
  • Interesting Posts

    Извлечение информации из текстового файла

    Aptitude хочет удалить тонны пакетов

    Может ли кто-нибудь объяснить это выражение по частям, пожалуйста? grep '\ ( \). \ 1'

    `du` получить разные результаты на разных машинах для одной и той же папки

    Запись наивысшего NF

    Найти имена файлов, которые не содержат заданную строку

    Баш-массив содержит ложные срабатывания

    Пакет `varka 'не найден при установке Marlin of Fedora 17

    Как автоматически записать все ваши терминальные сессии с помощью утилиты сценария, используя .cshrc

    Возвращение массива из функции ksh93

    Когда использовать перезагрузку (2) и перезагрузку (8)

    Повторяются ли повторяющиеся записи в переменной PATH с приоритетом, заданным первой записью?

    Как изменить имена файлов в каталоге на новые имена, содержащиеся в файле?

    Urxvt медленно рисует линии

    Графический интерфейс низкого разрешения для Linux на RaspberryPi, используемый в качестве мобильного устройства

    Linux и Unix - лучшая ОС в мире.