无法指定文件创建日期

The*_*lis 2 bash ubuntu shell-script date touch

我想自动创建一些文件,所以我创建了一个脚本。我还想指定这些文件的创建日期。

例如,在终端中,要创建一个创建日期为2012 年 5 月 12日的file.txt,我可以如下所示,touch

touch -d 20120512 file.txt
Run Code Online (Sandbox Code Playgroud)

列出该文件确认日期,

-rw-rw-r-- 1 lenovo lenovo 0 May  12  2012 file.txt
Run Code Online (Sandbox Code Playgroud)

如果我在脚本中应用上述内容,我正在创建的文件都将当前时间作为创建时间,而不是我指定的时间。我在这里做错了什么?

脚本

#!/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"
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 8

脚本的最后一部分,写入每个文件,将导致文件的最后修改时间全部更新为当前时间。更改时间使用touch应该是您对文件所做的最后一件事。

请注意,touch不能更改创建时间(在跟踪它的文件系统上);请参阅如何更改文件创建时间?(触摸仅更改修改时间)了解详情。