Bash
無法指定文件創建日期
我想自動創建一些文件,所以我創建了一個腳本。我還想指定這些文件的創建日期。
例如,在終端中,要創建一個創建日期為2012 年 5 月 12 日的file.txt ,如下所示,
touch
touch -d 20120512 file.txt
列出該文件確認日期,
-rw-rw-r-- 1 lenovo lenovo 0 May 12 2012 file.txt
如果我在腳本中應用上述內容,我正在創建的文件都將目前時間作為創建時間,而不是我指定的時間。我在這裡做錯了什麼?
腳本
#!/bin/bash ################################## #Generate dat and snapshot files.# ################################## srv_dir="/home/lenovo/Source/bash/srv" main_dir="${srv_dir}/main" database_dir="${main_dir}/Database" dat_file="${main_dir}/remote.dat" if [[ -e ${main_dir} ]]; then echo "${main_dir} allready exists." echo "Aborting..." exit 0 fi # Create directories. mkdir -p ${database_dir} # Create files. if [[ $1 == "--dat-newer" ]]; then # User wants dat file to be the latest modified file. # Create dat file with date as 'now'. touch ${dat_file} # Create snapshots with older dates. touch -d 20210511 "${database_dir}/snapshot001" touch -d 20210510 "${database_dir}/snapshot002" touch -d 20210512 "${database_dir}/snapshot004" touch -d 20210514 "${database_dir}/snapshot003" else # Create an old dat file. touch -d 20210512 "${dat_file}" # Create snapshots with older dates. touch -d 20210511 "${database_dir}/snapshot001" touch -d 20210510 "${database_dir}/snapshot002" touch -d 20210512 "${database_dir}/snapshot004" # Create snapshot003 with date as 'now'. touch "${database_dir}/snapshot003" fi # populate dat and snapshot files with data. echo "Data of ${dat_file}" > "${database_dir}/snapshot001" echo "Data of snapshot001" > "${database_dir}/snapshot001" echo "Data of snapshot002" > "${database_dir}/snapshot002" echo "Data of snapshot003" > "${database_dir}/snapshot003" echo "Data of snapshot004" > "${database_dir}/snapshot004"
腳本的最後一部分,寫入每個文件,將導致文件的最後修改時間全部更新為目前時間。更改使用時間
touch
應該是您對文件做的最後一件事。請注意,
touch
不能更改創建時間(在跟踪它的文件系統上);請參閱如何更改文件創建時間?(觸摸更改僅修改時間)了解詳情。
“我還想指定這些文件的創建日期”你不能這樣做,因為它是創建時間(“出生時間”,或
btime
)。它也很難訪問 - 特別是不是 forls
ortouch
- 但看看stat
你是否確實想訪問它。相反,您看到的是最後修改的日期時間。我要問的第一個問題是在您使用它們時是否
$database_dir
並且$dat_file
具有預期值。如果其中任何一個名稱中可能包含空格,則必須將它們放在雙引號中(無論如何,這是一種很好的做法)。例如,touch -d 20210511 "${database_dir}/snapshot001"
現在已經看到了完整的腳本,所有文件都包含目前日期/時間的原因是因為您看到的值是最後修改日期,而不是創建日期。
echo
您最後使用腳本末尾的五個語句集修改文件,因此它們都將具有目前日期/時間。