ファイル生成日を指定できません。

ファイル生成日を指定できません。

いくつかのファイルを自動的に生成したいので、スクリプトを作成しました。また、このファイルの生成日も指定したいと思います。

例えばファイル.txt作成日は次のとおりです。2012年5月12日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"

答え1

スクリプトの最後の部分は各ファイルに書き込まれ、ファイルの最後の変更時刻はすべて現在時刻に更新されます。時間の使用量を変更するには、次の手順を実行する必要がtouchあります。最後ファイルに実行する操作です。

作成時間はtouch変更できません(追跡するファイルシステムでは)。ファイル作成時間を変更するには? (タッチすると修正時間のみ変更されます)もっと学ぶ。

答え2

また、このファイルの作成日を指定したいと思います。「作成時間(「作成時間」または)なので、それをbtime行うことはできません。またアクセスするのは難しいです。特にlsorではありませんが、実際にアクセスしたいことを確認してください。touch代わりに表示されるのは日付です。stat最後の修正時刻。

私が尋ねたい最初の質問は、$database_dir使用時に期待される価値があるかどうかです。$dat_file名前にスペースを含めることができる場合は、二重引用符で囲む必要があります(とにかくこれは良い習慣です)。例えば、

touch -d 20210511 "${database_dir}/snapshot001"

スクリプト全体を確認したので、すべてのファイルに現在の日付/時刻が含まれているのは、表示される値が生成日ではなく最後に変更された日付であるためです。echoスクリプトの末尾にある5つのステートメントセットを使用してファイルを変更したので、すべて現在の日付/時刻を持ちます。

関連情報