Script shell for renaming and reordering files

I would like to change and rename files. I have this tree-like file structure:

ada/rda/0.05/alpha1_freeSurface.md
ada/rda/0.05/p_freeSurface.md
ada/rda/0.05/U_freeSurface.md
ada/rda/0.1/alpha1_freeSurface.md
ada/rda/0.1/p_freeSurface.md
ada/rda/0.1/U_freeSurface.md

I want these files to be renamed and rearranged as follows:

ada/rda/ada-0.05-alpha1.md
ada/rda/ada-0.05-p.md
ada/rda/ada-0.05-U.md
ada/rda/ada-0.1-alpha1.md
ada/rda/ada-0.1-p.md
ada/rda/ada-0.1-U.md
+4
source share
2 answers

Using the perl utility rename(sometimes called prename):

rename  's|ada/rda/([^/]*)/([^_]*).*|ada/rda/ada-$1-$2.md|' ada/rda/*/*

(Note: by default, some distributions install a command renamefrom a package util-linux. This command is incompatible . If you have such a distribution, see if a version of perl called prename. Is available .)

How it works

rename perl . . substitute . , , .

s|old|new|. old ada/rda/([^/]*)/([^_]*).*. 1 ( _) 2. new ada/rda/ada-$1-$2.md. , .

+1

basename dirname :

get_new_name()
{
    oldname=$1
    prefix=$(basename $oldname _freeSurface.md)
    dname=$(dirname $oldname)
    basedir=$(dirname $dname)
    dname=$(basename $dname)
    echo "$basedir/ada-$dname-$prefix.md"
}

. get_new_name("ada/rda/0.05/alpha1_freeSurface.md") ada/rda/ada-0.05-alpha1.md .

mv .

+1

Source: https://habr.com/ru/post/1608265/


All Articles