【问题标题】:Remove text in file name after particular search pattern在特定搜索模式后删除文件名中的文本
【发布时间】:2016-05-03 19:23:08
【问题描述】:

我的文件名如下:

file_name1.pdf.sometext.here

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

file_name1.pdf

【问题讨论】:

  • 这可能会有所帮助。 stackoverflow.com/questions/12152626/…
  • 对我帮助不大。我需要为目录中的所有文件运行一些东西,并且可能有多个 .text 区域。
  • 你试过什么? StackOverflow 的人们愿意,甚至渴望帮助您解决编程问题,但我们不是短期编码员。你的问题应该包括你尝试解决这个问题、你期望的结果以及你得到的结果(无论是错误还是不正确的行为)。请更新您的问题。
  • 使用rename 命令

标签: regex bash awk sed cut


【解决方案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

【讨论】:

  • 耸耸肩,应该。试试 -vn 调试?也许只是一个正则表达式问题。
  • *.here 在做什么? 1美元呢?我应该像从文件所在的目录中那样输入吗?
  • *.here 因为你说你的原始文件名是blabalbal.sometext.here。 1 美元,你不能只看一次文档以获得一些基本的了解吗?召集人已经给了你很大的提示
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2021-11-30
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多