Сравните, отличается ли самый новый файл в каталоге от предыдущего

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

В этом случае я копирую список измененных файлов во временный файл и использую zipс опцией -@.

Допустим, я изменил файлы Foo.h, Bar.cc и TestBar.cc.

Допустим, я создаю файл с именем модифицированный -files.txt, содержимое которого:

Foo.h
Bar.cc
TestBar.cc

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

cat modified-files.txt | zip modified-files.zip -@
0
20.08.2019, 13:50
1 ответ

Обратите внимание, что следующий фрагмент кода НЕ работает с именами файлов, содержащими пробелы, символы табуляции или символы новой строки.

Чтобы узнать больше об используемой здесь команде find-, см.https://unix.stackexchange.com/a/240424/364705

#!/bin/bash
lastrun=''
while true; do
  read -r newer older <<< \
    $(find. -type f -exec stat -c '%Y %n' {} \; \
    | sort -nr \
    | awk 'NR==1,NR==2 {print $2}'\
    | xargs )

  if [ "$newer" == "$lastrun" ]; then
    :
  else
    if ! cmp "$newer" "$older" > /dev/null ; then
      base64 "$newer"| tr -d '\n' | sed '$ a \'
      lastrun="$newer"
    fi
  fi
done

И решение с использованиемinotify-wait:

#!/bin/bash
lastfile=''
inotifywait -m /path/to/somewhere -e close -e moved_to |
while read path action file; do
  if [ "$lastfile" != '' ];then
    if ! cmp "${path}$file" "${path}${lastfile}" > /dev/null  ; then
    base64 "${path}${file}"
    fi
  fi
    lastfile="$file"
done
0
28.01.2020, 03:21

Теги

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