我有一个目录,其文件名具有以下格式:
DAM3D002_P_DAPedit.jpg
我需要将所有文件名重命名为:
DAM3D002.jpg
我正在使用Linux / Ubuntu 18.04
这是我尝试过的bash:
for f in *.jpg; do mv "$f" "${f%_*.jpg}.jpg" ; done
我希望输出:
DAM3D002.jpg
但是我得到了:
DAM3D002_P.jpg
答案 0 :(得分:2)
您可以使用
for f in *.jpg; do mv "$f" "${f%%_*.jpg}.jpg"; done
请参见10.1. Manipulating Strings:
${string%%substring}
从 $ string 的 back 中删除 $ substring 的最长匹配项。
与noted by l'L'l一样,如果您的* .jpg文件名可能不包含下划线,则上述解决方案将在文件名的末尾添加第二个.jpg
。如果不希望如此,请使用
for f in *.jpg; do echo "${f/_*.jpg/.jpg}"; done
files=(1.jpg 1_2.jpg 1_2_3.jpg /a/b/c/1_2_3.jpg)
for f in "${files[@]}"; do echo "${f/_*.jpg/.jpg}"; done
输出:
1.jpg
1.jpg
1.jpg
/a/b/c/1.jpg