LINUX.ORG.RU
решено ФорумAdmin

ls --full-time + время создания файла

 


0

0

Как добавить в вывод `ls --full-time` время создания файлов (ctime)?

Какой-то непонятный у ls мануал.

Сейчас имеем:

# ls --full-time
drwxr-xr-x   17 root root  3780 2014-07-07 09:11:45.633962036 +0400 dev

Хочу ещё одну колонку (точнее две) с датой и временем создания файлов.

время создания файлов (ctime)

ctime — это не время создания файла.
Время создания файла не хранится. Или хранится, но далеко не на всех файловых системах.

akk ★★★★★
()

ls не будет выводить две даты, мучайте find.

Ну, а то что ctime это «time of last modification of file status information» написано в man'е.

mky ★★★★★
()
Ответ на: комментарий от thespiritofbirdie

Она самая и данная фича труднопереносима между ФС.

Shadow1251
()
Ответ на: комментарий от sdio

man stat

       %x     Time of last access

       %X     Time of last access as seconds since Epoch

       %y     Time of last modification

       %Y     Time of last modification as seconds since Epoch

       %z     Time of last change

       %Z     Time of last change as seconds since Epoch

А вот в исходниках, да, есть:

/usr/src/linux/fs/ext4/ext4.h                                                                                                    
        __le32  i_crtime;       /* File Creation time */

Здесь пишут, что

Gnulib already supports the code for reading Btime (aka ext4's crtime, aka birth-time) from all file systems that support it (at least ext4 and NTFS). It's just that no one has yet written the code to make stat(1) take advantage of this code in the stat-times module.

Вот ведь, б*дь, 1001 пример того, что ядерные фифи в userspace отсутствуют.

thespiritofbirdie
() автор топика
Ответ на: комментарий от sdio

Я полон ненависти к не user-friendly ОСям, которые нужные вещи прячут глубоко в опу.

Я полон ненависти к разрабам GNU, которые простейшую фичу уже лет 10 не могут реализовать.

;-)

thespiritofbirdie
() автор топика

Скрипт, который рекурсивно выводит modification creation time для заданной директории. Файлы, содержащие в имени перевод строки, не поддерживаются. Впрочем, мне плевать на таких извращенцев.

cat ext4printmctimes

#! /bin/bash

# Description: prints ext4fs' files modification and creating times
# Created at: Mon Jul 21 20:42:14 MSK 2014

die()
{
	echo "Fatal error: $*"
	exit 1
}

countslashes()
{
	echo "$*" | awk '{for (i=1;i<=length($0);i++) if (substr($0,i,1) == "/") count++}{print count}'
}

printstats()
{
	inode=`stat -c %i "$1"`
	if [ -n "$inode" ]; then
		echo "$filename"
		debugfs -R "stat <$inode>" "$fdev" 2>/dev/null | egrep "mtime|crtime" | cut -c 32-
	fi
}

withprefix()
{
	if [ -n "$1" ]; then
		for i in `seq 1 $1`; do
			prefix="$prefix`echo -en "\t"`"
		done
	fi
	i=0
	while read string; do
		echo -n "$prefix"
		test $i -gt 0 && echo -n "  "
		echo "$string"
		i=$((i+1))
	done
}

wdir="$1"
test -z "$1" && die "Give me an argument (directory)"
cd "$wdir" || die "[$1] is not a directory"

echo "Indexing [$wdir] ..."

find . | while read filename; do
	fdev=`df "$filename" | awk '/\/dev/{print $1}'`
	test -z "$fdev" && echo "Cannot find the filesystem for [$filename]" && continue

	filename=`echo "$filename" | sed 's/^\.\///'`
	slashes=`countslashes "$filename"`
	printstats "$filename" | withprefix "$slashes"
done
thespiritofbirdie
() автор топика
Ответ на: комментарий от thespiritofbirdie

Вывод для примера:

Indexing [/etc/ConsoleKit] ...
.
  Wed Nov 10 23:50:29 2010
  Thu Jan  1 05:00:00 1970
run-session.d
  Wed Nov 10 23:50:18 2010
  Sat Jan  9 14:38:36 2010
run-seat.d
  Wed Nov 10 23:50:18 2010
  Thu Nov 19 22:18:56 1964
seats.d
  Fri Aug 17 14:29:02 2012
  Thu Jan  1 05:00:00 1970
	seats.d/00-primary.seat
	  Wed Nov 10 23:50:29 2010
	  Fri Aug 17 14:29:02 2012
thespiritofbirdie
() автор топика
Ответ на: комментарий от thespiritofbirdie

интересно для чего нужна дата создания файла? в моей практике не было необходимости в этом, а тебе зачем?

sdio ★★★★★
()
Ответ на: комментарий от sdio

На память (1), плюс для fоrеnsiсs очень полезно, например, когда расследуешь взлом сервера (2).

И вот ещё одна трабла вылезла: установить crtime можно только, написав собственную программу. Впрочем, это даже хорошо: скрипт киддис этим не будут заморачиваться.

thespiritofbirdie
() автор топика
Ответ на: комментарий от thespiritofbirdie

А, ну так время перед этим нужное поставить. До микросекунд, конечно, точности не хватит, но и задача, мягко говоря, странноватая: если уж есть поле «дата создания файла», то и равно оно должно быть дате создания файла, а не чему-то еще.

Ну или да, писать свой велосипед, если уж это зачем-то понадобилось.

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

А, ну так время перед этим нужное поставить.

Время системы поменять? Возможно, только неудобно.

В том же Far нажимаешь Ctrl + A и редактируешь всё. ;-)

Впрочем, редактирование не интересует - просмотреть сейчас никак нельзя, кроме рутового debugfs.

thespiritofbirdie
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.