bash - Batch rename directories to match name of a file in subdirectory -


i have many directories within /home/environment named various time , date stamps. want rename of these directories instead of time date stamp each directory has name of .txt file contains part of shell script. e.g.

before

/home/environment/2014-03-12-09-49-26/xxxx-a.2a1-xxxx-0x_b.txt /home/environment/2014-03-12-09-50-34/xxxx-c.d57-xxxx-4x_e.txt 

after

/home/environment/xxxx-a.2a1-xxxx-0x_b/xxxx-a.2a1-xxxx-0x_b.txt /home/environment/xxxx-c.d57-xxxx-4x_e/xxxx-c.d57-xxxx-4x_e.txt 

my answer question better way rename files based on multiple patterns describes general pattern can here:

 job_select /path/to/directory| job_strategy | job_process 

where job_select responsible selecting objects of job, job_strategy prepares processing plan these objects , job_process executes plan. general discussion pattern, please see previous question, write down implementation here.

this assumes filenames not contain vertical bar | nor newline character.

the job_select function

 # job_select path  #  produce list of files process  job_select()  {    find "$1" -type f -name '*.txt'  } 

the job_strategy function

# job_strategy #  prepare plan renaming directories job_strategy() {   sed -e 's@/\([^/]*\)/\([^/]*\)\.txt$@|\1|\2@' } 

the job_process function

# job_process #  rename directories according plan job_process() {    local radical oldname newname    while ifs='|' read radical oldname newname;      mv "$radical/$oldname" "$radical/$newname"    done } 

note assumes files in distinct directories distinct.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -