Dolphin service menu help: preserve file timestamp

Alex Schuster wonko at
Fri Dec 17 23:48:13 GMT 2010

Dotan Cohen writes:

> On Fri, Dec 17, 2010 at 20:30, Alex Schuster <wonko at> wrote:
>> Yes. Something like this (untested):
>> #!/bin/bash
>> while (( $# ))
>> do
>>        date=$( ls -l --full-time "$1" |
>>                awk '{ print $6" "$7 }' |
>>                sed 's/.00000*//g' )
>>        iconv -f CP1255 -t UTF-8 "$1" > "$1-utf8"
>>        touch -d "$date" "$1-utf8"
>>        shift
>> done
> Thanks. I have some googling to do, but I'll ask anyway:
>> while (( $# ))
> Does this mean to go through each CLI argument, something like foreach?

Right. $# is the number of command line arguments, and (( x )) is true
when $x is != 0. Alternatively, you could as well do it like this:

for file in "$@"
	# and use "$file" instead of "$1" (the first argument)

> What does the "shift" line do?

It discards the first argument, and rotates the others. $2 becomes $1,
$3 becomes $2, and so on.

>>        date=$( ls -l --full-time "$1" |
>>                awk '{ print $6" "$7 }' |
>>                sed 's/.00000*//g' )
> This is pure genius, I was wondering exactly how difficult it would be
> to get this info into a variable in the format that touch would use.

This looks more complicated than it is. ls -l --full-time gives the full
time of the file, and awk then outputs columns 6 and 7, which give date
and time. The time also has the fraction of seconds, which the touch
command will not understand, so we need the sed statement which replaces
the dot and a sequence of zeroes with an empty string. Actually, I made
a mistake, the dot needs to be escaped with a backslash, as a simlpe dot
matches every character, similar to a questionmark in file specifications.

>> If you want to replace the files, you could proabaly use recode, which keeps
>> the time unless told otherwise:
>> Exec=recode CP1255..utf8 %f
> Actually, this is _exactly_ what I need. Thanks!

I thought so, but then I had already written the code :)

Glad I could help,

This message is from the kde mailing list.
Account management:
More info:

More information about the kde mailing list