| John Von Essen on 17 Nov 2018 11:39:42 -0800 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: [PLUG] scripting help, variables in sed |
Im waiting for the Perl example….
-John
> On Nov 16, 2018, at 10:58 AM, Fred Stluka <fred@bristle.com> wrote:
>
> Brent,
>
> Nice answer! Considered, thoughtful, detailed, accurate.
> I like it!
>
> It's a shame we don't have a mechanism in the PLUG list for
> StackOverflow-style ratings for good answers and helpful
> contributors. I'd give you a "thumbs up"!
>
> --Fred
> ------------------------------------------------------------------------
> Fred Stluka -- Bristle Software, Inc. -- http://bristle.com
> #DontBeATrump -- Make America Honorable Again!
> ------------------------------------------------------------------------
>
> On 11/16/18 10:30 AM, brent timothy saner wrote:
>> On 11/16/18 10:02 AM, Michael Lazin wrote:
>>> Thank you, I am very familiar with find and exec, but this doesn't
>>> accomplish my goal. Maybe I wasn't clear. I want a number to be added
>>> in front of each file name and that number to be incremented by one so
>>> each file ends up with a unique name so they can be put together in a
>>> single folder. I was under the impression that sed -i would accomplish
>>> this, but maybe I'm doing this entirely wrong, I want to edit the
>>> filename and not the content. I am sorry, I am comfortable with bash
>>> but I am at best a noob programmer. Thanks.
>>>
>> ah, yes, i thought you were only interested in moving to a single
>> directory as that's the only thing explicitly mentioned.
>>
>> so sure, if you want to do that:
>>
>> __________________________________________
>> num=0
>> for f in $(find * -type f -name "*.jpg");
>> do
>> mv ${f} ${num}${f}
>> ((num++))
>> done
>> __________________________________________
>>
>>
>> but that's a bit silly, that. they're already going to have a unique
>> filename if you're pulling them all from the same source directory.
>>
>>
>> the below not only guarantees a unique filename per unique file content
>> (MOSTLY[0]), but would have completely removed your need to run fdupes:
>>
>> __________________________________________
>>
>> for f in $(find * -type f -name "*.jpg");
>> do
>> newfname=$(md5sum ${f} | awk '{print $1".jpg"}')
>> mv ${f} newdir/${newfname}
>> done
>> __________________________________________
>>
>>
>> but again, this all predicates on you (pointlessly) running this on a
>> glob search against files which are all in the same directory.
>>
>> if they're in subdirs, it's a little more comfortable to deal with in
>> python:
>>
>> __________________________________________
>> #!/usr/bin/env python3
>>
>> import os
>> import hashlib
>>
>> #cnt = 0
>>
>> for root, subdirs, files in os.walk('path/to/parent/dir'):
>> for f in files:
>> fpath = os.path.join(root, f)
>> if f.endswith('.jpg'):
>> # If you want hash-based naming, which has built-in dupe
>> avoidance:
>> h = hashlib.md5() # can also be a stronger hash, e.g. .sha512()
>> with open(fpath, 'rb') as data_in:
>> h.update(f.read()) # it'd be smart to implement
>> chunking here [1] but being that these are in theory just JPEG files...
>> new_fpath = os.path.join(root, '{0}.jpg'.format(h.hexdigest()))
>> # Or if you just want to use a blind counter prefix:
>> #new_fpath = os.path.join(root, (str(cnt) + f))
>> #cnt += 1
>> # Remember to uncomment cnt = 0 above.
>> os.rename(fpath, new_fpath)
>> __________________________________________
>>
>> ta-da.
>>
>>
>>
>> [0] https://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities
>> using e.g. sha512sum for instance, while increasing the length of
>> the filenames, would avoid this. you're very much unlikely to encounter
>> it "in the wild" as a result of this particular use and scope, though.
>>
>> [1]
>> https://git.square-r00t.net/OpTools/tree/centos/find_changed_confs.py#n68
>>
>>
>>
>> ___________________________________________________________________________
>> Philadelphia Linux Users Group -- http://www.phillylinux.org
>> Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce
>> General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug
>
> ___________________________________________________________________________
> Philadelphia Linux Users Group -- http://www.phillylinux.org
> Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce
> General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug
___________________________________________________________________________
Philadelphia Linux Users Group -- http://www.phillylinux.org
Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce
General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug