Debian GNU/Linux 6.0でBashを使用しています。ファイル作成日時を取得することは可能ですか?変更日時ではありません。 ls -lh a.txt
とstat -c %y a.txt
はどちらも変更時間のみを提供します。
残念ながら、POSIX規格で定義されている各ファイルには3つの異なる時間値しか保存されていないため、一般にクエストを実行することはできません( 基本定義セクション4.8ファイル時間更新 を参照)
各ファイルには、最後のデータアクセスの時刻、最後のデータ変更の時刻、およびファイルステータスが最後に変更された時刻の3つの異なるタイムスタンプが関連付けられています。これらの値は、 <sys/stat.h> で説明されているように、ファイル特性構造struct statで返されます。
編集:以下のコメントで述べたように、使用するファイルシステムによっては、メタデータにファイル作成日が含まれる場合があります。ただし、そのような情報の保存は標準ではありません。それに応じて、実際に使用されているファイルシステムが何らかの方法でそれを保存する場合、移植性の問題が別のファイルシステムに移動する可能性があります。
ls -i file #output is for me 68551981
debugfs -R 'stat <68551981>' /dev/sda3 # /dev/sda3 is the disk on which the file exists
#results - crtime value
[root@loft9156 ~]# debugfs -R 'stat <68551981>' /dev/sda3
debugfs 1.41.12 (17-May-2010)
Inode: 68551981 Type: regular Mode: 0644 Flags: 0x80000
Generation: 769802755 Version: 0x00000000:00000001
User: 0 Group: 0 Size: 38973440
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 76128
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
atime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013
mtime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
**crtime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013**
Size of extra inode fields: 28
EXTENTS:
(0-511): 352633728-352634239, (512-1023): 352634368-352634879, (1024-2047): 288392192-288393215, (2048-4095): 355803136-355805183, (4096-6143): 357941248-357943295, (6144
-9514): 357961728-357965098
mikyraの答えは良いです。事実は彼が言ったことと同じです。
[jason@rh5 test]$ stat test.txt
File: `test.txt'
Size: 0 Blocks: 8 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 588720 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 500/ jason) Gid: ( 500/ jason)
Access: 2013-03-14 01:58:12.000000000 -0700
Modify: 2013-03-14 01:58:12.000000000 -0700
Change: 2013-03-14 01:58:12.000000000 -0700
ファイルが最初に作成されたことを確認する場合は、一連のファイルを作成するときにシステム日付を追加してファイル名を構成できます。
パフォーマンス上の理由でnoatimeでファイルシステムをマウントした場合、atimeには作成時間が表示される可能性が高いことに注意してください。 noatimeの結果、パフォーマンスが大幅に向上する(ファイルを読み取るたびにディスク書き込みを削除する)ことを考えると、必要な結果が得られる賢明な構成オプションになる可能性があります。
94490 menus.xmlここで、番号94490はiノードを表します
それから:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg-root 4.0G 3.4G 408M 90% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 124M 27M 92M 23% /boot
/dev/mapper/vg-var 7.9G 1.1G 6.5G 15% /var
ファイルmenus.xmlが「/」つまり「/ dev/mapper/vg-root」であるため、ルート「/」ファイルシステムのマウントポイントを見つける
出力は次のようになります。
debugfs 1.41.12 (17-May-2010)
Inode: 94490 Type: regular Mode: 0644 Flags: 0x0
Generation: 2826123170 Version: 0x00000000
User: 0 Group: 0 Size: 4441
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 16
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
atime: 0x5266e47b -- Wed Oct 23 09:47:55 2013
mtime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
Size of extra inode fields: 4
Extended attributes stored in inode body:
selinux = "unconfined_u:object_r:usr_t:s0\000" (31)
BLOCKS:
(0-1):375818-375819
TOTAL: 2
作成時間を確認できる場所:
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
作成日時は通常notに保存されます。いいえ、できません。
作成時間(別名誕生時間)を見つけるにはstatを使用し、findを使用して一致させることもできます。
最終更新時刻を示すこれらのファイルがあります:
$ ls -l --time-style=long-iso | sort -k6
total 692
-rwxrwx---+ 1 XXXX XXXX 249159 2013-05-31 14:47 Getting Started.pdf
-rwxrwx---+ 1 XXXX XXXX 275799 2013-12-30 21:12 TheScienceofGettingRich.pdf
-rwxrwx---+ 1 XXXX XXXX 25600 2015-05-07 18:52 Thumbs.db
-rwxrwx---+ 1 XXXX XXXX 148051 2015-05-07 18:55 AsAManThinketh.pdf
次のようにfindを使用して、特定の期間内に作成されたファイルを検索します。
明らかに、ファイルシステムはファイルの誕生時刻を知っています:
$ find -newerBt '2014-06-13' ! -newerBt '2014-06-13 12:16:10' -ls
20547673299906851 148 -rwxrwx--- 1 XXXX XXXX 148051 May 7 18:55 ./AsAManThinketh.pdf
1407374883582246 244 -rwxrwx--- 1 XXXX XXXX 249159 May 31 2013 ./Getting\ Started.pdf
statを使用してこれを確認できます。
$ stat -c "%w %n" * | sort
2014-06-13 12:16:03.873778400 +0100 AsAManThinketh.pdf
2014-06-13 12:16:04.006872500 +0100 Getting Started.pdf
2014-06-13 12:16:29.607075500 +0100 TheScienceofGettingRich.pdf
2015-05-07 18:32:26.938446200 +0100 Thumbs.db
stat manページで%wについて説明しています:
%w time of file birth, human-readable; - if unknown
@mikyraが説明したように、作成日時はどこにも保存されません。
上記のメソッドはすべて素晴らしいですが、最終変更日のみをすばやく取得したい場合は、次のように入力できます。
ls -lit /path
-tオプションを使用すると、最終変更日までに指定された/ path内のすべてのファイルがリストされます。
本当にそれを達成したい場合は、 inotifywait のようなファイル監視を使用できます。
ディレクトリを監視し、ファイル作成に関する情報をそのディレクトリ外の別のファイルに保存します。
while true; do
change=$(inotifywait -e close_write,moved_to,create .)
change=${change#./ * }
if [ "$change" = ".*" ]; then ./scriptToStoreInfoAboutFile; fi
done
作成時間が保存されていないため、inotifyに基づいて独自のシステムを構築できます。
さらに良い:
lsct ()
{
debugfs -R 'stat <'`ls -i "$1" | (read a b;echo -n $a)`'>' `df "$1" | (read a; read a b; echo "$a")` 2> /dev/null | grep --color=auto crtime | ( read a b c d;
echo $d )
}
2016年7月20日水曜日19:25:48 2016
https://unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/131347#131347 から引用すると、次のシェルスクリプトが作成時間を取得するために機能します。
get_crtime() {
for target in "${@}"; do
inode=$(stat -c %i "${target}")
fs=$(df "${target}" | tail -1 | awk '{print $1}')
crtime=$(Sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*')
printf "%s\t%s\n" "${target}" "${crtime}"
done
}
武器庫に追加する別のトリックは次のとおりです。
$ grep -r "Copyright" /<path-to-source-files>/src
一般的に、ファイルを変更した場合、「著作権」でクレジットを請求する必要があります。日付、ファイル名、投稿者、連絡先メールの結果を調べます。
grepの結果の例:
/<path>/src/someobject.h: * Copyright 2007-2012 <creator's name> <creator's email>(at)<some URL>>