修剪目录中所有文件的文件扩展名的一部分 - Linux

时间:2015-10-07 16:35:30

标签: linux bash awk sed

我要求我修改目录中包含的所有文件的文件扩展名: -

文件就像;

America.gz:2170
Europe.gz:2172
Africa.gz:2170
Asia.gz:2172

我需要的是修剪所有文件中的:2170和:2172,以便只保留.gz扩展名。

我知道在下面的SED代码的帮助下,文件中的所有条目都可能存在,但我需要目录中的所有文件: -

**sed 's/:.*//' file**

任何用于解决此问题的bash或awk代码都将受到高度赞赏。

提前致谢。

3 个答案:

答案 0 :(得分:4)

您可以在bash

中执行此操作
shopt -s nullglob
for f in *.gz:*; do
    mv -- "$f" "${f%:*}"
done

"${f%:*}"将删除变量:

的RHS上$f之后的所有内容

答案 1 :(得分:1)

您可以使用重命名命令。

rename 's/:.*//' *.gz:*

rename 's/:[^:]*$//' *.gz:*

答案 2 :(得分:0)

可以使用for循环和子字符串处理运算符'%'完成整个作业:

“$ {parameter%word}删除最小的后缀模式。”

#!/bin/sh

for i in *
do #mv "$i" "${i%:}"
   echo " mv $i ${i%:*}"
done