我在Linux中尝试了('mv','sed')命令。 我有多个文件,我想删除文件的最后一个字符
之前
natural1_dd-aa.txt
natural2_dd-aa.txt
natural3_dd-aa.txt
我要删除('_dd-aa')
之后
natural1.txt
natural2.txt
natural3.txt
答案 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))
(更新:此问题是在编辑问题后删除python标记之前适用的。它不再相关。)
答案 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
_dd-aa
的所有文件_dd-aa
部分来获取新文件名mv
重命名文件答案 2 :(得分:-1)
一种方法:
ls *dd-aa* | sed 's/\(.*\)_dd-aa\(.txt\)/mv & \1\2/' | sh
仅列出具有模式(*dd-aa*
)的文件。使用sed
,通过在模式之前的第一部分(_dd-aa
)和模式之后的第二部分中准备mv命令。并将其传递给外壳。