Вопрос
Как получить все последние файлы с первыми 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.
Я сделал это таким образом.
# 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
Спасибо всем.
, если вы хотите, чтобы ведущее имя до цифр можно использовать цифра , как Разделитель . Он ставит ведущее имя в $ 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