Убедитесь, что передача файлов правильно передана в командной строке?

Итак, я только что получил новый 4-ТБ SSHD, и у меня будет техническая установка его у меня дома до 26 мая 2015 года. Чтобы сделать резервную копию своих материалов, я купил 4-ТБ внешний диск и решил скопировать все с моего внутреннего и 3TB диски для моего 4TB диска. Я успешно скопировал 1 ТБ, но я случайно отменил передачу 3 ТБ в середине копии - когда я использовал nautilus - и я хочу проверить целостность файлов, так как я не знаю, как был заполнен мой диск 3 ТБ быстро, и я просто хочу стереть все, как только я проверил целостность. Чтобы проверить целостность, я не хочу переформатировать диск, так как здесь у меня есть несколько лишних файлов, которых нет на других дисках. Я хочу, чтобы команда анализировала путь к каждому файлу в «каталоге a», как если бы он был изолирован, а затем проверяла, что файл существует в «каталоге b» и имеет тот же хэш и размер. Если хеш отличается, размер другой, или файл не существует в «каталоге b», он скопирует файл снова. Вот пример.

Допустим, каталог A находится в / a, а каталог b в / b. Если файл размером 500 КБ имеет путь /a/eevee.png, он будет ожидать, что файл /b/eevee.png существует и равен 500 КБ с тем же хешем. Если он не существует, не имеет 500 КБ и / или имеет другую хэш-сумму, он скопирует файл и перезапишет без запроса.

Кроме того, это дополнительная функция. Если файл в каталоге a совпадает с файлом в каталоге b, как я уже говорил ранее, но метка времени отличается, то метка времени файла в директории b будет изменена на ту, которая находится в каталоге a.

1
задан 25 May 2015 в 00:14

2 ответа

Я на самом деле нашел путь с большим исследованием, не вырыл достаточно глубоко до регистрации этого. Я хотел бы сослаться на него в этом сообщении здесь (На Форумах Ubuntu, не Спросить Ubuntu). Пользователь papibe прокомментировал:

Ho jonnyboysmithy.

Это похоже на задание для 'rsync'.

По умолчанию rsync скопирует и обновит файлы на основе времени изменения и размера. Однако можно определить только для проверки размера файла.

, Например:

rsync -av --size-only  source/  destination/

я надеюсь, что это помогает. Сообщите нам, как это идет. Отношения.

0
ответ дан 25 May 2015 в 00:14

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

основная идея состоит в том, чтобы использовать hexdump для проверки файлов. Сценарий берет два каталога в качестве исходных данных. Ограничение: Это обрабатывает только файлы в каталоге, не подкаталоги (потому что я не знаю, как сделать это все же). Таким образом, можно использовать это, если у Вас нет этого многими папками, но если у Вас есть несколько папок и подпапок, под управлением сценарий вручную для каждого каталога может быть утомительным. Еда для будущего думала: создают список папок и подпапок для источника и места назначения, и затем автоматизируют сценарий, проходящий два списка.

Сценарий в Действии

у меня есть tester2 как исходный каталог и testerdir как место назначения, где я уже скопировал файлы. На строке 123 я выполняю сценарий для проверки файлов, скопированных. На строке 124 я изменяюсь, содержание tester2/hello файла (измените его содержание от "ТЕСТА" до "ТЕСТЕРА"). На строке 125 Вы видите, что сценарий обнаруживает тот файл, привет был изменен/изменен в размере/повреждении и копирует файл снова. В строке 126 Вы видите, что я проверяю что привет файл в соответствиях папки назначения та из исходной папки. enter image description here

Сценарий

#!/bin/bash
# Author: Serg Kolo
# Date: Mon May 25 01:19:59 MDT 2015
# Description: script to verify files in  two directories
# written for http://askubuntu.com/q/627817/295286
copy_the_file ()
{
  cp -f  "$SOURCE_DIR"/"$filename" "$DEST_DIR"/"$filename"
}


if [ $# -ne 2  ]; then
    printf "Usage: verify-files.sh  SOURCE_DIR  DEST_DIR"
    exit 1
fi

SOURCE_DIR="$1"
DEST_DIR="$2"

IFS=":"
for filename in $(find "$SOURCE_DIR" -maxdepth 1 -type f -printf "%f:" | sed 's/.\///g'   )
do

#echo "$filename"
#echo "$DEST_DIR"/"$filename"




    if [ -e "$DEST_DIR"/"$filename"   ];then
        hexdump "$SOURCE_DIR"/"$filename" > .dump1
            hexdump "$DEST_DIR"/"$filename" > .dump2
            diff .dump1 .dump2 > /dev/null
        if [ $? -eq 0  ];then
            echo " "$filename" is OK  "
        else 
            echo ""$filename" has a problem"
            copy_the_file
        fi
    else 
        copy_the_file
    fi


done
0
ответ дан 25 May 2015 в 00:14

Другие вопросы по тегам:

Похожие вопросы: