Поиск файлов в порядке времени модификации - PullRequest
1 голос
/ 13 января 2012

У меня есть определенный сценарий оболочки, подобный этому:

для имени в `find $ 1 -name $ 2 -type f -mmin + $ 3`
делать
Filename = `basename" ls $ name "`
echo "$ Filename" >> $ 1 / order.txt
сделано

Команда find возвращает N файлов в алфавитном порядке. Их имена вставляются в order.txt в алфавитном порядке. Как изменить это в порядок времени модификации?

то есть, если сначала был изменен файл F2, а затем файл F1, то вышеприведенный скрипт вводит сначала F1, а затем F2 в order.txt в алфавитном порядке. Но я хочу, чтобы сначала вводился F2, а затем F1, то есть в соответствии с порядком изменения времени

Я хочу, чтобы order.txt после сценария был
Order.txt =>
F2
F1

, а не как
F1
F2

Пожалуйста, помогите

Ответы [ 3 ]

1 голос
/ 30 января 2012

find имеет переключатель -exec, позволяющий передавать любые совпадающие имена файлов во внешнюю команду:

find $1 -name $2 -type -mmin +$3 -exec ls -1t [-r] {} +

При этом find передает все соответствующие файлы одновременноls и разрешите это сделать для вас.С опциональным флагом -r файлы будут печататься в порядке от самого старого до самого нового;без, в порядке от самого нового до самого старого.

0 голосов
/ 13 марта 2012

Вот, пожалуйста, :

find_date_sorted() {
    # Ascending, by ISO date
    while IFS= read -r -d '' -u 9
    do
        cut -d ' ' -f 3- <<< "$REPLY"
    done 9< <(find ${1+"$@"} -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\0' | sort -z)
}
0 голосов
/ 15 января 2012
for name in `find $1 -name $2 -type f -mmin +$3`
do 
ftime=$(stat -c %Y $name)
Filename=`basename "ls $name"`
echo "$ftime $Filename"
done | sort -n | awk '{print $2}' > $1/order.txt

Один способ: получить файл mtimes в секундах с начала эпохи, отсортировать по секундам с начала эпохи, а затем вывести только имя файла

...