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

时间:2016-01-27 01:27:38

标签: regex bash awk sed cut

我有一个文件名,如下所示:

file_name1.pdf.sometext.here

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

file_name1.pdf

2 个答案:

答案 0 :(得分:1)

这应该让你开始:

#!/bin/bash

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

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

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

答案 1 :(得分:1)

使用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