Я создал скрипт для перечисления всех файлов в каталоге и под ним.Я хотел добавить обратную связь с помощью pv, потому что я обычно использую его из корневого каталога.
Проблема в том, что find всегда включает дробные секунды в свое время (% TT), но я не хочу записывать так много деталей.
Если я напишу сценарий для выполнения всех действий за один проход, я получу правильный вывод.Но если я использую промежуточные файлы для оценки во время второго прохода, результат меняется, и я не понимаю, почему.
Эта версия дает правильный результат:
#!/bin/bash
find -printf "%11s %TY-%Tm-%Td %TT %p\n" 2> /dev/null |
# - Remove the fractional seconds from the time
# before: 4096 2011-01-19 22:43:51.0000000000 .
# after : 4096 2011-01-19 22:43:51 .
colrm 32 42 |
pv -ltrbN "Enumerating files..." |
# - Sort every thing by filename
sort -k 4
Носортировка может занять много времени, поэтому я попробовал что-то вроде этого, чтобы получить немного больше обратной связи:
#!/bin/bash
TMPFILE1=$(mktemp)
TMPFILE2=$(mktemp)
# Erase temporary files before quitting
trap "rm $TMPFILE1 $TMPFILE2" EXIT
find -printf "%11s %TY-%Tm-%Td %TT %p\n" 2> /dev/null |
pv -ltrbN "Enumerating files..." > $TMPFILE1
LINE_COUNT="$(wc -l $TMPFILE1)"
#cat $TMPFILE1 | colrm 32 42 | #1
#cat $TMPFILE1 | cut -c1-31,43- | #2
#cut -c1-31,43- $TMPFILE1 | #3
#sed s/.0000000000// $TMPFILE1 | #4
awk -F".0000000000" '{print $1 $2}' $TMPFILE1 | #5
pv -lN "Removing fractional seconds..." -s $LINE_COUNT > $TMPFILE2
echo "Sorting list by filenames..." >&2
cat $TMPFILE2 |
sort -k 4
Ни одно из 5 «решений» не работает.Часть «.0000000000» остается в выводе.
Может кто-нибудь объяснить, почему?
Мое окончательное решение - объединить операцию резки с поиском и использовать только один временный файл.Только сортировка выполняется отдельно.