重命名多个文件,但仅删除部分文件名

时间:2019-04-25 10:38:19

标签: python linux bash

我在Linux中尝试了('mv','sed')命令。 我有多个文件,我想删除文件的最后一个字符

之前

natural1_dd-aa.txt
natural2_dd-aa.txt
natural3_dd-aa.txt

我要删除('_dd-aa')

之后

natural1.txt
natural2.txt
natural3.txt

3 个答案:

答案 0 :(得分:0)

这几天,我正在使用pathlib处理此类问题。

from pathlib import Path

for path in Path(".").glob("*.txt"):
    path.rename(path.with_name(path.stem.partition("_dd-aa")[0] + path.suffix))

更新:此问题是在编辑问题后删除标记之前适用的。它不再相关。)

答案 1 :(得分:0)

在有类似于oguz ismail指出给Guru的规则的情况下尝试回答,但是:

find . -name "*_dd-aa*" | while read file; do new=$(echo $file | sed 's/_dd-aa//g'); mv $file $new; done

对于Unix专家来说可能过于复杂了;但它似乎可以按要求工作。

您实际上并不需要将新文件名存储为变量,可以将其移动到mv命令中:

find . -name "*_dd-aa*" | while read file; do mv $file $(echo $file | sed 's/_dd-aa//g'); done

方法

  1. 查找包含_dd-aa的所有文件
  2. 通过删除_dd-aa部分来获取新文件名
  3. 使用mv重命名文件

答案 2 :(得分:-1)

一种方法:

ls *dd-aa* | sed 's/\(.*\)_dd-aa\(.txt\)/mv & \1\2/' | sh

仅列出具有模式(*dd-aa*)的文件。使用sed,通过在模式之前的第一部分(_dd-aa)和模式之后的第二部分中准备mv命令。并将其传递给外壳。