Я пытаюсь создать пакет, PowerShell или что-нибудь, что новичок, как я, мог бы легко выполнить для выполнения следующей задачи. Любая помощь будет принята с благодарностью.
У меня есть несколько тысяч PDF-файлов в папке, которые я пытаюсь отсортировать. Проблема в том, что папка включает в себя старые и новые версии тех же документов PDF. Я только хочу сохранить самую новую версию каждого уникального документа. Пересмотренная версия обозначена добавлением буквы в конце имени файла (AZ). Вот примерный список.
670BA-11-001.pdf
670BA-11-001A.pdf
670BA-11-001B.pdf
670BA-12-001.pdf
670BA-15-030C.pdf
670BA-49-120AC.pdf
670BA-49-120AD.pdf
- Все файлы начинаются с "
670BA
" - Следующие числа меняются.
670BA-XX-XXX.pdf
- Файл без буквы в конце имени файла указывает, что это оригинальная ревизия.
- Файл с буквой в конце имени файла указывает, что это пересмотренная версия.
- Пересмотры идут от
A-Z
а затемAA-AZ...
и так далее, и тому подобное.
В идеале я хотел бы, чтобы командный файл удалил более старые версии и оставил самую новую версию каждого уникального документа. В этом случае вывод должен выглядеть следующим образом:
670B-11-001B.pdf
670B-12-001.pdf
670B-15-030C.pdf
670BA-49-120AD.pdf
Мне был предоставлен следующий код, однако я считаю, что он в Unix (опять же простите мое отсутствие знаний здесь). Будет ли это работать, если бы я мог преобразовать его в команду Windows?
codes=`ls | sort | cut -d'-' -f2 | uniq`
for f in $codes; do old=`ls *-$f-* | head -n -1`; rm -vf $old; done
Вот что происходит;
ls | sort lists all the files in lexical order
cut -d'-' -f2 | uniq
разбивает имена файлов на «-», берет двухзначное число из середины и избавляется от дубликатов.
ls *-$f-* | head -n -1
перечисляет все файлы для двузначного кода, кроме последнего - который является самым новым.
rm -f $old
удаляет эти старые файлы, и -f предотвращает его сбой, поскольку список пуст.
SAMPLE RUN;
/tmp# touch 601R-11-001.pdf 601R-11-001B.pdf 601R-15-030C.pdf 601R-25-005E.pdf 601R-49-120AD.pdf 601R-11-001A.pdf 601R-12-001.pdf 601R-25-005D.pdf 601R-49-120AC.pdf
/tmp# codes=`ls | sort | cut -d'-' -f2 | uniq`
/tmp# echo $codes
11 12 15 25 49
/tmp# for f in $codes; do old=`ls *-$f-* | head -n -1`; rm -vf $old; done
removed '601R-11-001.pdf'
removed '601R-11-001A.pdf'
removed '601R-25-005D.pdf'
removed '601R-49-120AC.pdf'