Как вывести список последних файлов с отметками времени от частичного дублирования имени - PullRequest
0 голосов
/ 29 мая 2020

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

   123456_20200425-012034.xml 
   123456_20200424-120102.xml
   123456_20200425-121102.xml
   234567_20200323-112232.xml
   123456_20200423-111102.xml --- consider that this file is having latest 
                                  timestamps out of all above duplicate file

Как это сделать using bash?

Также на выходе должны быть файлы, которые не дублируются. Это означает, что из 10K файлов несколько файлов не дублируются, и эти файлы должны быть включены в вывод.

Требуется вывод типа (файлы последних отметок времени)

123456_20200423-111102.xml
234567_20200323-112232.xml

Ответы [ 2 ]

0 голосов
/ 01 июня 2020

Я сделал так:

list=$(ls | awk -F _ '{print $1}' | uniq)

for i in $list
do
  mv "$(find . -type f -name "$i*" -print | sort -n -t _ -k 2 | tail -1)" ../destination
done

1) Сохраненные файлы uniq в списке

2) Выполненный файл списка в l oop, найдите последний файл отметки времени и переместите его в папку назначения

0 голосов
/ 30 мая 2020

Поскольку мы можем предположить, что глобусы отсортированы буквенно-цифровыми , мы можем использовать подстановочный знак для перебора файлов и построения набора результатов:

#!/bin/bash

# change INPUTDIR to your input directory
INPUTDIR=.
seen=
store=()

for file in "$INPUTDIR"/* ; do
    if [[ "$seen" != *"${file%_*}"* ]] ; then
        store+=( "$file" )
        seen="$seen ${file%_*}"
    fi
done

# results
echo "${store[@]}"

Пояснение:

  1. Перебирать все файлы в каталоге.
  2. Получить имя файла перед первым подчеркиванием (например, 123456). Если у нас его раньше не было (например, "$seen" != *"${file%_*}"*), добавьте его в наш список файлов для хранения. Если мы видели это раньше, пропустите файл.
  3. Распечатайте результаты.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...