在Linux上删除多个文件的部分文件名

sha*_*haq 40 linux bash shell

我想从当前目录中的所有文件名中删除test.extra

for filename in *.fasta;do 

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

done
Run Code Online (Sandbox Code Playgroud)

但它抱怨没有创建file.echo是确保它正确列出.

hos*_*ter 45

首先使用'sed -e'而不是'\ e'

我建议你在bash中这样做

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

done
Run Code Online (Sandbox Code Playgroud)

  • 我的文件名包含空格。修改上面的内容并使用下面的行对我有用:`mv“ $ filename”“ $ {filename // test.extra /}”` (2认同)
  • @GG2 google“bash中的字符串操作”,它是一个字符串替换语法 (2认同)

the*_*eon 34

尝试 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
Run Code Online (Sandbox Code Playgroud)

  • 如果您收到错误“在 (eval 2) 第 1 行使用“strict subs”时不允许裸字“extra.test””,请尝试使用以下语法:“rename 's/extra.test//;” *` (2认同)

小智 28

我知道这个步骤已经很久了,但是下面的oneliner,从经过验证的答案中获得灵感,对我帮助很大;)

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


Rod*_*uis 24

尝试rename命令:

rename 's/test.extra//g' *.fasta
Run Code Online (Sandbox Code Playgroud)

  • @unwind真的.我经常使用它,以至于我忘了它不是bash native.抱歉! (2认同)