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

У меня есть каталог, постоянно изменяющий имена файлов (по числовому значению), перечисленные как:

-rw-rw----. 1 root root 10493952 May 7 10:39 A0000000.LOG -rw-rw----. 1 root root 10493952 May 7 08:38 A0000001.LOG -rw-rw----. 1 root root 10493952 May 7 08:38 A0000002.LOG ... ... -rw-rw----. 1 root root 10493952 May 7 08:38 A0000582.LOG ... and so on... 

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

Скажем, приложение выдает файл A0000096.LOG . И я, если увижу A0000097.LOG , также A0000097.LOG , я бы ::

 rsync A* --exclude A0000096.LOG --exclude A0000097.LOG user@remoteHost:/somedir/ 
  • Следует отметить:

    • Приложение запускает различное имя файла для работы rsync cron каждый час. В этом примере имя файла A0000096.LOG

    • Файлы, имеющие более высокое числовое значение, чем имя файла вывода App ( A0000096.LOG в приведенном выше примере), могут иметь A0000096.LOG же дату создания / время, что и имя выходного файла приложения

    • К моменту запуска rsync выходное имя файла приложения может иметь более позднюю измененную дату / метку времени, чем файлы с более высоким численным значением.

    • Возможно, существует вероятность того, что файлы с большими численными значениями не будут созданы или могут быть созданы более чем 1 (может быть от 10 до 20)

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

Любая помощь приветствуется.

3 Solutions collect form web for “Перечислить временные файлы по числовому значению, имеющему число больше заданного постоянно изменяющегося имени файла”

Если я правильно понял вопрос, вы хотите rsync все файлы в диапазоне от A0000000 до A0000095 . Ну, тогда не говори A* ; используйте список положительных подстановочных знаков (например, шаблоны расширения глобусов или файлов), которые генерируют имена файлов, которые вы хотите, а не идентифицируете те, которые вы хотите исключить. Сделайте это, разложив диапазон на поддиапазоны:

  Subrange Wildcard A0000000-A0000089 A00000[0-8][0-9] A0000090-A0000095 A000009[0-5] 

Так вы сказали бы

 rsync A00000[0-8][0-9] A000009[0-5] user@remoteHost:/somedir/ 

В случае, если у вас возникли проблемы с обобщением этого подхода из одного примера, рассмотрим 97169.

  Subrange Wildcard A0000000-A0089999 A00[0-8][0-9][0-9][0-9][0-9] A0090000-A0096999 A009[0-6][0-9][0-9][0-9] A0097000-A0097099 A00970[0-9][0-9] A0097100-A0097159 A00971[0-5][0-9] A0097160-A0097168 A009716[0-8] 

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

 shopt -s nullglob 

чтобы заставить оболочку идти вперед и запускать команду rsync с игнорируемыми подстановочными знаками (т. е. расширенными до нуля).

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

Вы можете сделать это, построив строку, содержащую имена файлов, разделенные символами новой строки, и используя подстановку строк, чтобы удалить конец строки, а затем полагаться на некотируемое расширение, чтобы вернуть усеченную строку обратно в список. Я предполагаю, что в именах файлов нет новых строк и что ваша оболочка bash или ksh (с простой sh, вам нужно использовать позиционные параметры вместо именованного массива).

 nl=$'\n' # newline, we use it as a separator cut_from=A0000096.LOG log_files=(A???????.LOG) set -f; IFS="$nl" # disable wildcard expansion and set the word separator to newline only log_files="$nl${log_files[*]}$nl" # turn the array into a string with newlines separating elements log_files=(${log_files%"$nl$cut_from$nl"}) # remove elements from $cut_from onwards and split the string into an array unset IFS; set +f rsnyc -a "${log_files[@]}" … elsewhere:/some/dir 

Отвечая на мой вопрос:

  CUT_LOG=A0000096.LOG #Actually, Logic goes here to determine name of file. LISTLOG=`ls -1 /Source_Dir/A*.LOG | sed "/$CUT_LOG/,$ d"` # Create a list that has only relevant entries # sed deletes all lines starting from pattern matching line till the end.(here pattern=CUT_LOG) rsync -a `echo "${LISTLOG[@]}"` user@remoteHost:/somedir/ # This would be faster than using loop (explained next) 

или используя цикл

  for line in `echo "${LISTLOG[@]}"`; do # Recursively loop through the array and rsync each entry rsync -a $line user@remoteHost:/somedir/ done 
  • Может ли rsync определить, где остановился прерванный процессор?
  • Как избежать ненужного удаления и повторного перемещения перемещенных папок при использовании rsync?
  • Как я могу найти самые большие папки в дереве (самый быстрый способ)
  • rsync dir-merge, затронутый фильтрами на локальном и удаленном
  • подавить предупреждение rsync: некоторые файлы исчезли, прежде чем они могут быть переданы
  • Ошибка Rsync 23: некоторые файлы не были переданы при копировании файлов с диска Windows на внешний жесткий диск
  • Rsync, включают только определенные типы файлов, исключая некоторые каталоги
  • См. Только изменения при запуске rsync
  • Использование cygwin и rsync - «файл паролей не должен быть другим доступным»
  • как фильтровать по звездочке или аналогичному выражению rsync в zsh
  • rsync дает «chown <...> failed: Invalid argument (22)» с общим доступом nfs
  • Interesting Posts

    USB-клавиатура работает с перебоями в GRUB 2 при перезагрузках – как заставить ее работать последовательно?

    Что мне нужно сделать резервную копию перед обновлением?

    Невозможно запустить скрипт в cron через манифест

    Команда для вставки моей команды и ее вывода

    Как предотвратить завершение сценария при выходе из оболочки?

    сценарий резервного копирования, чтобы исключить некоторые родительские директории и включить некоторые дочерние директории

    Использование более крупного диска в настройке RAID 1

    Шифрование с помощью GPG с использованием ключа, переданного в качестве аргумента CLI

    Как настроить сопоставления клавиатуры с Wayland

    Программа автозапуска в Xfce

    Где найти "розетки"

    Способ сохранения состояния программы

    Как предоставить sftp доступ к подкаталогу только не к родительскому

    Мой grep (GNU grep) 2.5.1 не подчиняется символу обратной косой черты и специальному выражению

    LMDE – пустая клемма при загрузке, без ввода

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