Removing part of a filename for multiple files on

2019-01-10 10:16发布

问题:

I want to remove test.extra from all of my file names in current directory

for filename in *.fasta;do 

    echo $filename | sed \e 's/test.extra//g'

done

but it complains about not founding file.echo is to be sure it list correctly.

回答1:

First of all use 'sed -e' instead of '\e'

And I would suggest you do it this way in bash

for filename in *.fasta; do 
    [ -f "$filename" ] || continue
    mv "$filename" "${filename//test.extra/}"

done


回答2:

Try rename "extra.test" "" *

$ find
./extra.test-eggs.txt
./extra.testbar
./fooextra.test
./ham-extra.test-blah

$ rename "extra.test" "" *
$ find
./-eggs.txt
./bar
./foo
./ham--blah


回答3:

I know this tread is old, but the following oneliner, inspired from the validated answer, helped me a lot ;)

for filename in ./*; do mv "./$filename" "./$(echo "$filename" | sed -e 's/test.extra//g')";  done


回答4:

Try the rename command:

rename 's/test.extra//g' *.fasta


回答5:

$ mmv '*test.extra*.fasta' '#1#2.fasta'

This is safe in the sense that mmv will not do anything at all if it would otherwise overwrite existing files (there are command-line options to turn this off).



回答6:

For one thing, you have a \e instead of -e.



回答7:

In Kali linux rename command is rename.ul

rename.ul 'string-to-remove' 'string-to-replace-with' *.jpg

example: rename.ul 'useless-string' '' *.jpg This will delete useless-string from all the jpg image's filname.



标签: linux bash shell