How to change file's timestamp?

Hongwei Li hongwei at wustl.edu
Tue Aug 22 16:12:41 UTC 2006


> On Tue, 22 Aug 2006 10:56:11 -0500 (CDT), Hongwei Li wrote:
>> The problem is when I run it at command line, it works, but not in
>> the script:
>>
>> # touch --date="Tue Aug 22 08:30:00 CDT 2006" t1
>> works well. However, the script mystmp:
>>
>> #!/bin/sh
>> newstmp=$1
>> touch --date=$newstmp t1
>>
>> and run mystmp as:
>> # ./mystmp "Tue Aug 22 08:30:00 CDT 2006"
>>
>> didn't do what I want, but created:
>>
>> # ls -l
>> total 32
>> -rw-r--r-- 1 root root   0 Aug 22 00:00 08:30:00
>> -rw-r--r-- 1 root root   0 Aug 22 00:00 2006
>> -rw-r--r-- 1 root root   0 Aug 22 00:00 22
>> -rw-r--r-- 1 root root   0 Aug 22 00:00 Aug
>> -rw-r--r-- 1 root root   0 Aug 22 00:00 CDT
>> -rwxr-xr-x 1 root root 420 Aug 22 10:47 mystmp
>> -rw-r--r-- 1 root root   0 Aug 22 00:00 t1
>>
>> What's wrong? Thanks!
>
> The problem is that the parameter has spaces within it, so when you
> use that as
> a variable within your script, you need to enclose it with quotes. Your script
> currently expands that command to something such as:
>
> 	touch --date=Tue Aug 22 08:30:00 CDT 2006 t1
>
> which - since the "Aug," "22," "08:30:00," etc files don't exist -
> creates them
> and sets their timestamps to the current time. You need to use --date="$1" so
> that the command is interpreted as you had intended:
>
> 	touch --date="$1" foo.file
>
> That would expand to something such as:
>
> 	touch --date="Tue Aug 22 08:30:00 CDT 2006" foo.file
>
> which is what I believe you are intending to do.
>
> Hope that helps.
> --
> Peter Gordon (codergeek42)
> This message was sent through a webmail interface,
>      thus has no digital signature.
>

It works.  Thank you very much!
-H.




More information about the fedora-list mailing list