Bash 去除前导数字和空格的多个文件名

Bash 去除前导数字和空格的多个文件名,bash,scripting,Bash,Scripting,在狂欢节上。使001 file.ext变成file.ext。我该怎么做呢?您可以使用两个seds表达式。第一个删除所有内容直到最后一个空格,第二个删除前导数字 $ echo "001 fiile.ext" | sed -e 's/^.* //' -e 's/^[0-9]*//g' fiile.ext 或者在纯Bash中: shopt -s extglob for f in *file.ext do mv "$f" "${f##+([0-9 ])}" done 如果您只想转换文件名(作

在狂欢节上。使
001 file.ext
变成
file.ext
。我该怎么做呢?

您可以使用两个seds表达式。第一个删除所有内容直到最后一个空格,第二个删除前导数字

$ echo "001 fiile.ext" | sed -e 's/^.* //' -e 's/^[0-9]*//g'
fiile.ext
或者在纯Bash中:

shopt -s extglob
for f in *file.ext
do
    mv "$f" "${f##+([0-9 ])}"
done

如果您只想转换文件名(作为脚本中的变量),可以执行以下操作:

[[ $FILENAME =~ ^[0-9\s]+(.+) ]] && FILENAME="${BASH_REMATCH[1]}"
如果您试图实际重命名文件系统上的文件名,那么这样更合适

for F in *.ext; do
  [[ $F =~ ^[0-9\s]+(.+) ]] && mv "$F" "${BASH_REMATCH[1]}"
done

那么,你在“文件”中有两个i是不是输入错误?也就是说,您是真的希望它从001 fiile.ext转换为file.ext,还是希望它将001 file.ext转换为file.ext?这可能无法满足海报的需要-例如,如果删除前导数字和空格后文件名中仍有空格。这可以通过稍微调整sed表达式来修复:echo“001 fiile.ext”| sed-e的/^[0-9]*/'
for F in *.ext; do
  [[ $F =~ ^[0-9\s]+(.+) ]] && mv "$F" "${BASH_REMATCH[1]}"
done