在特定搜索模式后删除文件名中的文本

Remove text in file name after particular search pattern

我有一个文件名如下:

file_name1.pdf.sometext.here

我有一个包含多个相同格式文件的目录,我想编辑所有文件,以便删除 .pdf 之后的部分...因此文件看起来像这样

file_name1.pdf

这应该让你开始:

#!/bin/bash

for FILE in "$@"; do
  NEWFILE=$(echo $FILE | sed  -re 's/(.*.pdf).*//')
  if [ ! -z "$NEWFILE" -a ! -f "$NEWFILE" -a ! -d "$NEWFILE" ]; then
    mv "$FILE" "$NEWFILE"
  fi
done

但是如果你有/usr/bin/rename,使用它:

 rename 's/(.*\.pdf).*//' *.here

使用parameter expansion:

$ ls *.pdf*
file_name1.pdf.sometext.here  file_name2.pdf.blah  file_name3.pdf.sometext
$ for fname in *.pdf*; do mv "$fname" "${fname//.pdf.*/.pdf}"; done
$ ls *.pdf*
file_name1.pdf  file_name2.pdf  file_name3.pdf