Проверить правильность передачи файлов в файлы командной строки?

Эта конкретная проблема была просто ошибкой. Он исправлен и больше не должен появляться. Если это так, прокомментируйте здесь!

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

1 ответ

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

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

Ограничение:

У меня есть tester2 как исходный каталог и testerdir в качестве места назначения, где я уже скопировал файлы. В строке 123 я запускаю скрипт для проверки файлов, которые копируются. В строке 124 я меняю содержимое файла tester2 / hello (измените его содержимое с «TEST» на «TESTER»). В строке 125 вы можете видеть, что скрипт обнаруживает, что файл hello был изменен / изменен в размере / коррумпированности и копирует файл заново. В строке 126 вы можете видеть, что файл hello в папке назначения соответствует папке источника.

Сценарий

#!/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
2
ответ дан 23 May 2018 в 20:17
  • 1
    Почему вы не используете diff файлы напрямую, вместо того, чтобы различать шестнадцатеричные значения? O.o if diff -q "$SOURCE_DIR/$filename" "$DEST_DIR/$filename"; then ... Вентилятор Рубе Голдберг? :П – muru 26 May 2015 в 10:27
  • 2
    @muru em. , , потому что я думал, что diff работает только с текстовыми файлами. , . Нет ограничений для типов файлов для diff? и я впервые слышу о Рубе Голдберге. – Sergiy Kolodyazhnyy 26 May 2015 в 10:38
  • 3
    Конечно, diff наиболее часто используется таким образом. Вы также можете использовать cmp. См. Также: unix.stackexchange.com/questions/153286/… – muru 26 May 2015 в 10:42

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

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