У меня есть папка с многочисленными версиями файлов (тысячи из них), каждая с уникальной отметкой даты / времени в качестве расширения файла.Например:
./one.20190422
./one.20190421
./one.20190420
./folder/two.txt.20190420
./folder/two.txt.20190421
./folder/folder/three.mkv.20190301
./folder/folder/three.mkv.20190201
./folder/folder/three.mkv.20190101
./folder/four.doc.20190401
./folder/four.doc.20190329
./folder/four.doc.20190301
Мне нужно получить уникальный список базовых файлов.Например, для приведенного выше примера это будет ожидаемый результат:
./one
./folder/two.txt
./folder/folder/three.mkv
./folder/four.doc
Я пришел с приведенным ниже кодом, но мне интересно, есть ли лучший, более эффективный способ.
# find all directories
find ./ -type d | while read folder ; do
# go into that directory
# then find all the files in that directory, excluding sub-directories
# remove the extension (date/time stamp)
# sort and remove duplicates
# then loop through each base file
cd "$folder" && find . -maxdepth 1 -type f -exec bash -c 'printf "%s\n" "${@%.*}"' _ {} + | sort -u | while read file ; do
# and find all the versions of that file
ls "$file".* | customFunctionToProcessFiles
done
done
Если это имеет значение, конечная цель - найти все версии определенного файла в группах базового файла и обработать их для чего-либо.Поэтому я планировал получить базовые файлы, затем просмотреть список и найти все файлы версий.Итак, снова используя приведенный выше пример, я сначала обработаю все файлы one.*
, затем файлы two.*
и т. Д.
Есть ли лучший, более быстрый и / или более эффективный способчтобы сделать это?
Некоторые примечания:
- Возможно, есть тысячи файлов.Я знаю, что могу просто искать все файлы из корневой папки, удалять расширение даты / времени, сортировать и получать уникальные данные, но, поскольку может быть тысячи файлов, я подумал, что может быть более эффективным циклически проходить по каталогам.
- Расширение файла с отметкой даты / времени не находится под моим контролем и не всегда может быть просто цифрами.Единственное, что я могу гарантировать, это конец периода.И независимо от того, в каком формате дата / время, все файлы будут делиться им - не будет некоторых файлов с одним форматом и других файлов с другим форматом.