如果文件名超过 n 个字符,则删除最后一个字符

如果文件名超过 n 个字符,则删除最后一个字符

我对 unix shell 有点陌生,我似乎没有找到问题的答案:

我有一个包含多个文件的文件夹:正确的文件名恰好包含 13 个字符(数字 + 字母 + 下划线)。例如 :

1305359000_PS.JPG

有些文件命名不正确,错误总是在最后一个字符中,例如:

9009015000_PS_1.jpg

我需要运行一个查找/替换命令,该命令将以这种方式对我的文件夹中的所有文件起作用:

如果文件名 > 13 个字符(不带扩展名),则删除第 13 个字符之后的所有字符。

我尝试了一些命令毫米波awk,但到目前为止我还被困住了。

编辑:忘记精确,该命令应该考虑文件名中的空格并删除它们(如果存在)。

答案1

假设您使用的是 bash shell

(shopt -s globstar; rename --no-act 's/^(.{13}).*/$1\.jpg/' **/*)

因此(....),该shopt -s globstar选项仅适用于这一个命令 - 如果由于某种原因您尚未启用通配符。如果使用 zsh

rename --no-act 's/^(.{13}).*/$1\.jpg/' **/*

--no-act开关将预览rename潜在的功能。
如果您对建议的更改感到满意,请删除-no-act,您的文件将被批量重命名。

答案2

可能还有另一种最快的解决方案。 此代码不考虑文件名中包含空格。 但你可以尝试下面的代码:

SHW@SHW:/tmp # for i in `find /home/user -type f`
do
      mv $i `echo $i | cut -c -13`.`$i | rev | cut -d'.' -f 1 | rev`
done

相关内容