我有一个文件夹,里面有几张图片。我想将文件名全部转换为小写字母,然后删除所有出现的某些字符串。
例如,从此以后,BILD02_CMYK_freigestellt_RENDER_3D.jpg
与单词相连的cmyk
、render
、3d
和应该删除。_
到目前为止,我有以下组合,但这将是第一个段落,仅删除第一个出现的位置,而不是每个。
// Rename names to lowercase
for file in *;
do
mv "$file" "$file.tmp";
mv "$file.tmp" "`echo $file | tr "[:upper:]" "[:lower:]"`";
done
// Remove cmyk from filename
// optimierung: macht es nur einmal bei einer datei - ----
for file in *; do mv "${file}" "${file/cmyk/}"; done
for file in *; do mv "${file}" "${file/freigestellt/}"; done
for file in *; do mv "${file}" "${file/-/_}"; done
答案1
rename -n '$_=lc; s/(cmyk|freigestellt|render|3d|_|-)//g' *.jpg
这使用了珀尔重命名命令(也称为prename
和file-rename
)。这是不是与 util-linux 中的命令混淆rename
,后者具有完全不同的命令行选项和功能。
它首先使用 perl 的函数将文件名转换为小写lc()
,然后删除您在文本或示例代码中提到的所有单词和字符。
该-n
选项会导致rename
进行空运行 - 它只会向您显示如果您允许它会做什么。要使其真正重命名文件,请删除-n
或将其替换-v
为详细输出。
例如
$ touch BILD{00..05}_CMYK_freigestellt_RENDER_3D.jpg
$ rename -v '$_=lc; s/(cmyk|freigestellt|render|3d|_|-)//g' *.jpg
BILD00_CMYK_freigestellt_RENDER_3D.jpg renamed as bild00.jpg
BILD01_CMYK_freigestellt_RENDER_3D.jpg renamed as bild01.jpg
BILD02_CMYK_freigestellt_RENDER_3D.jpg renamed as bild02.jpg
BILD03_CMYK_freigestellt_RENDER_3D.jpg renamed as bild03.jpg
BILD04_CMYK_freigestellt_RENDER_3D.jpg renamed as bild04.jpg
BILD05_CMYK_freigestellt_RENDER_3D.jpg renamed as bild05.jpg