Recursively remove file name suffix from files in shell

When we develop locally, we add the ".dev" or ".prod" files to the files, which should only be available for the development / production server, respectively.

What I would like to do is; after deploying the site to the server, recursively find all files with the suffix ".dev" (for example) and delete it (rename the file). How can I do this, preferably completely in the shell (without scripts), so I can add it to our script deployment?

Our servers run Ubuntu 10.04.

+3
source share
4 answers

( shell-only, find mv):

find . '(' -name '*.dev' -o -name '*.prod' ')' -type f -execdir sh -c 'mv -- "$0" "${0%.*}"' '{}' ';'

rename xargs, :

find . '(' -name '*.dev' -o -name '*.prod' ')' -type f -print0 | xargs -0 rename 's/\.(dev|prod)$//'

, , .

+3
for file in `ls *.dev`; do echo "Old Name $file"; new_name=`echo $file | sed -e 's/dev//'` ; echo "New Name $new_name"; mv $file $new_name; done

, , , new.xml, ( xmlEventLog_2010-03-23T11:16: 16_PFM_1_1.xml), _new :

for file in `ls *new.xml`; do echo "Old Name $file"; new_name=`echo $file | sed -e 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/2010-03-23/g' | sed 's/_new//g'` ; echo "New Name $new_name"; mv $file $new_name; done

, ?

+1

, POSIX- :

remove-suffix () {
    local filename
    while read filename; do
        mv "$filename" "$(printf %s "$filename" | sed "s/\\.$1\$//")"
    done
}

find -name '*.dev' | remove-suffix .dev

. , , .

0
source
find /fullpath -type f -name "*.dev"|sed 's|\(.*\)\(\.pdf\)|mv & \1.sometag|' | sh
0
source

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


All Articles