Re: bash shell command issue

2016-10-16 Thread David Patrick Henderson
Try  touch `ls -1`

On 15 Oct 2016, at 19:33, Carl Hoefs  wrote:

> Yeah, that's what I thought at first, too. But touch begs to differ:
> 
> $ ls -1 | sort | touch
> usage:
> touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file 
> ...
> 
> -Carl
> 
> 
>> On Oct 15, 2016, at 7:31 PM, Macs R We  wrote:
>> 
>> Right off the bat, I think you made a mistake in putting the * at the end of 
>> the command. The whole idea of piping the output from LS is to input it to 
>> touch, and you just provided touch with another argument first. I think if 
>> you just let LS do its job and don't provide touch any arguments, you will 
>> get what you want, including all of the necessary requoting.
>> 
>>> On Oct 15, 2016, at 7:24 PM, Carl Hoefs  
>>> wrote:
>>> 
>>> I'm trying to arrange the files in a directory to have modification dates 
>>> according to alphabetical sort order. (Sounds weird, but Alpine car units 
>>> use modification date as the ordering of music tracks on a USB stick.)
>>> 
>>> In bash I'm using:
>>> 
>>> ls -1 | sort | touch *
>>> 
>>> ...but it doesn't work, there is no change in the modification date of the 
>>> files. I'm guessing the problem is that the filenames have spaces, so the 
>>> 'touch *' is only touching the first word of the filename.
>>> 
>>> Is there a way to do this?
>>> 
>>> -Carl
>>> 
>>> ___
>>> MacOSX-talk mailing list
>>> MacOSX-talk@omnigroup.com
>>> http://www.omnigroup.com/mailman/listinfo/macosx-talk
>> 
> 
> ___
> MacOSX-talk mailing list
> MacOSX-talk@omnigroup.com
> http://www.omnigroup.com/mailman/listinfo/macosx-talk


David P Henderson
c: 757.286.3212
--
"Human beings are unable to be honest with themselves about themselves. They 
cannot talk about themselves without embellishing."
-- Akira Kurosawa

___
MacOSX-talk mailing list
MacOSX-talk@omnigroup.com
http://www.omnigroup.com/mailman/listinfo/macosx-talk


Re: bash shell command issue

2016-10-16 Thread Arno Hautala
In order to use a pipe with touch, you'd need to move the pipe
contents over to the argument list. This is where xargs comes in.

ls | sort | xargs touch

Tip: you can omit the '-1' as that's the default when you're redirecting output.

Other options as suggested are:

touch `ls`
or
touch $(ls)


But none of this guarantees any order. touch is free to process
arguments however it sees fit.

You can however tell xargs to process one item at a time.

ls | sort | xargs -n1 touch

That will at least get you the items touched in order by name.
However, touch is fast so you might still end up with items touched
with the same date. And now you're getting in to bigger shell
scripting territory.

find . -name '*.mp[34]' -print | sort | while read F ; do touch "$F" ;
sleep 1 ; done

That'll touch one file every second. Certainly, if you have a lot of
files this could take a lot of time.

The ideal situation at this point is to provide a time that you want
the file touched with. You could even start with the current date and
iterate over the files in reverse, decrementing one second each file.

The following should do the trick.

#!/bin/bash
# save the current date in seconds
CURRENT_DATE=$(date +%s)
# find any mp3/mp4 files, sort alphanumerically, reverse the sort,
process each line
# if you don't care about case, use: sort -fr
find . -name '*.mp[34]' | sort -r | while read CURRENT_FILE ;
do
# decrement one second
((CURRENT_DATE-=1))
# convert the date to the format required by touch
   TOUCH_DATE=$(date -r $CURRENT_DATE +%Y%m%d%H%m.%S)
# touch the file
touch -t $TOUCH_DATE "$CURRENT_FILE"
done


On Sun, Oct 16, 2016 at 11:35 AM, David Patrick Henderson
 wrote:
> Try  touch `ls -1`
>
> On 15 Oct 2016, at 19:33, Carl Hoefs  wrote:
>
>> Yeah, that's what I thought at first, too. But touch begs to differ:
>>
>> $ ls -1 | sort | touch
>> usage:
>> touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file 
>> ...
>>
>> -Carl
>>
>>
>>> On Oct 15, 2016, at 7:31 PM, Macs R We  wrote:
>>>
>>> Right off the bat, I think you made a mistake in putting the * at the end 
>>> of the command. The whole idea of piping the output from LS is to input it 
>>> to touch, and you just provided touch with another argument first. I think 
>>> if you just let LS do its job and don't provide touch any arguments, you 
>>> will get what you want, including all of the necessary requoting.
>>>
 On Oct 15, 2016, at 7:24 PM, Carl Hoefs  
 wrote:

 I'm trying to arrange the files in a directory to have modification dates 
 according to alphabetical sort order. (Sounds weird, but Alpine car units 
 use modification date as the ordering of music tracks on a USB stick.)

 In bash I'm using:

 ls -1 | sort | touch *

 ...but it doesn't work, there is no change in the modification date of the 
 files. I'm guessing the problem is that the filenames have spaces, so the 
 'touch *' is only touching the first word of the filename.

 Is there a way to do this?

 -Carl

 ___
 MacOSX-talk mailing list
 MacOSX-talk@omnigroup.com
 http://www.omnigroup.com/mailman/listinfo/macosx-talk
>>>
>>
>> ___
>> MacOSX-talk mailing list
>> MacOSX-talk@omnigroup.com
>> http://www.omnigroup.com/mailman/listinfo/macosx-talk
>
>
> David P Henderson
> c: 757.286.3212
> --
> "Human beings are unable to be honest with themselves about themselves. They 
> cannot talk about themselves without embellishing."
> -- Akira Kurosawa
>
> ___
> MacOSX-talk mailing list
> MacOSX-talk@omnigroup.com
> http://www.omnigroup.com/mailman/listinfo/macosx-talk



-- 
arno  s  hautala/-|   a...@alum.wpi.edu

pgp b2c9d448
___
MacOSX-talk mailing list
MacOSX-talk@omnigroup.com
http://www.omnigroup.com/mailman/listinfo/macosx-talk