如何重命名没有扩展名的文件

如何重命名没有扩展名的文件

我有一堆文件,应该以编程方式重命名,以便应用程序可以理解。

他们有这样的格式: 要重命名的文件

我需要从末尾剪切直到第一个 _ 并将其替换为点(.)。

因为我事先不知道文件名的长度,也不知道文件名中 _ 的数量,所以您对 awk/sed/cut 有什么想法吗?

答案1

for F in *_*; do echo mv -- "${F}" "${F%_*}.${F##*_}"; done

如果输出看起来正确,则删除echo上面的命令。

诀窍是${F%_*}删除最后一个_26${F##*_}删除最后一个之前的所有内容_。尝试这些命令看看它是如何工作的。分隔符现在是:

echo "${PATH}"
echo "${PATH%:*}"
echo "${PATH##*:}"
echo "${PATH%:*}_${PATH##*:}"

答案2

使用sed

for file in *_*
do 
    echo mv $file $( sed 's/\(.*\)_/\1\./' <<< $file)
done

echo如果您满意,请删除。

答案3

sed您可以使用行尾标记 ( )将最后一个块替换为$

#/bin/bash
for file in *_* ; do
  #any alphanumeric string as suffix
  mv $file $( sed 's/_\([A-Za-z0-9]\{1,\}\)$/.\1/' <<< $file )
  #alternatively numbers only as in given input sample
  mv $file $( sed 's/_\([0-9]\{1,\}\)$/.\1/' <<< $file )
done

AFAIK\{1,\}前面列表中的“一个或多个”位是 GNU sed- 但我不能 100% 确定这个限制。

相关内容