我想从当前目录中的所有文件名中删除test.extra
for filename in *.fasta;do 
    echo $filename | sed \e 's/test.extra//g'
done
但它抱怨没有创建 file.echo 是为了确保它正确列出。
首先使用 'sed -e' 而不是 '\e'
我建议你在 bash 中这样做
for filename in *.fasta; do 
    [ -f "$filename" ] || continue
    mv "$filename" "${filename//test.extra/}"
done
    尝试rename "extra.test" "" *
或者rename 's/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
    我知道这个胎面很旧,但是下面的 oneliner,从经过验证的答案中得到启发,对我帮助很大;)
for filename in ./*; do mv "./$filename" "./$(echo "$filename" | sed -e 's/test.extra//g')";  done
    试试rename命令:
rename 's/test.extra//g' *.fasta
    $ mmv '*test.extra*.fasta' '#1#2.fasta'
这是安全的,因为mmv如果它会覆盖现有文件(有命令行选项可以关闭它),它根本不会做任何事情。
 // EXTENSION - File extension of files
 // STRING - String to be Replace
      for filename in *.EXTENSION;
      do  [ -f "$filename" ] || continue;  
      mv "$filename" "${filename//STRING/}"; 
      done
    在Kali linux中重命名命令是rename.ul
rename.ul 'string-to-remove' 'string-to-replace-with' *.jpg
例如: rename.ul 'useless-string' '' *.jpg 这将从所有 jpg 图像的文件名中删除无用字符串。