bash, берите с начала все последние файлы с первыми 3 одинаковыми символами в названии файла

Вопрос

Как получить все последние файлы с первыми 3 одинаковыми символами в начале от имени файла?

У меня есть

file1.csv
file2.csv
file3.csv (newest)
new-file1.csv
new-file2.csv (newest)
new-file3.csv

Мне нужно

file3.csv (newest)
new-file2.csv (newest)

Я пробовал цикл с массивом, условия вводились вручную с помощью ls -t, но как насчет простого цикла, который делает это сам по себе? Сканировать все файлы и получить все файлы? Это можно сделать только с помощью для i в $(find . -maxdepth 1 -type f | cut -c1-6 | sort | uniq); do ls -t $i* | head -1; done command?

Thanks.

0
задан 19 February 2021 в 17:35

2 ответа

Я сделал это таким образом.

# find last file by 6 first chars, copy to archive
for i in $(find . -maxdepth 1 -type f | cut -c1-6 | sort | uniq)
do
    cp $(ls -t $i* | head -1) $path/archive | head -1
done

Спасибо всем.

0
ответ дан 18 March 2021 в 23:33

, если вы хотите, чтобы ведущее имя до цифр можно использовать цифра , как Разделитель . Он ставит ведущее имя в $ 1 и расширение в $ NF (если вы будете использовать их вместе, вы получите, file.csv или new-file.csv).

ls -t | awk -F '[0-9]' '!seen[$1$NF]++' | xargs cp -vt $path/archive --

сортировка эпох ; С 1970-2001-0100100 секунд с 1970-01-01 00:00:00 UTC, что дает обратный заказ меньше секунд, равна старым объектам. Это неизбежно сортирует метку времени напротив имени файла.

find -mindepth 1 -type f -printf '%T@\t%P\0' \
  | sort -z -k1rn | cut -z -f2- \
  | awk -F '[0-9]' 'BEGIN {RS=ORS="\0"} !seen[$1$NF]++' | xargs -0 -n 1

... или сортировка в обратном направлении дает вам сортировка -Rz -k1n

0
ответ дан 18 March 2021 в 23:33

Другие вопросы по тегам:

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