SED:从文件名中删除最后四个字符

时间:2016-01-04 09:25:22

标签: linux sed

我有名为test_images的文件夹中的文件列表,如下所示

006103insettedryshampoo-blossom7096.jpg
008299bathmassagesponges-3packa1a4.jpg
008507colgatetripleactiontoothpaste125d.jpg
8729teatreeoilantisepticcream25g1005.jpg

我想通过从每个文件中删除最后四个字符来重命名所有文件

006103insettedryshampoo-blossom.jpg
008299bathmassagesponges-3pack.jpg
008507colgatetripleactiontoothpaste.jpg
8729teatreeoilantisepticcream25g.jpg

我怎样才能使用sed?

任何建议都将受到赞赏。

提前致谢:)

3 个答案:

答案 0 :(得分:2)

如果您的文件名没有空格,您可以:(在test_images目录下)

ls -1|sed -r 's/(.*)....(\.jpg)$/mv & \1\2/'

检查生成的mv命令。如果没问题,请将|sh添加到上面的命令中以进行实际重命名。

如果您的文件名包含空格,则需要添加引号:

..../mv "&" "\1\2"/'|sh

这是一个快速而肮脏的解决方案,因为使用ls结果并不是一个好习惯。

更新:添加“如何”示例:

LsyHP 11:41:40 /tmp/test/img
kent$  ll
total 0
drwxr-xr-x 2 kent kent 120 Jan  4 11:41 ./
drwxr-xr-x 3 kent kent 160 Jan  4 11:41 ../
-rw-r--r-- 1 kent kent   0 Jan  4 11:41 006103insettedryshampoo-blossom7096.jpg
-rw-r--r-- 1 kent kent   0 Jan  4 11:41 008299bathmassagesponges-3packa1a4.jpg
-rw-r--r-- 1 kent kent   0 Jan  4 11:41 008507colgatetripleactiontoothpaste125d.jpg
-rw-r--r-- 1 kent kent   0 Jan  4 11:41 8729teatreeoilantisepticcream25g1005.jpg
LsyHP 11:41:43 /tmp/test/img
kent$  ls -1|sed -r 's/(.*)....(\.jpg)$/mv & \1\2/'
mv 006103insettedryshampoo-blossom7096.jpg 006103insettedryshampoo-blossom.jpg
mv 008299bathmassagesponges-3packa1a4.jpg 008299bathmassagesponges-3pack.jpg
mv 008507colgatetripleactiontoothpaste125d.jpg 008507colgatetripleactiontoothpaste.jpg
mv 8729teatreeoilantisepticcream25g1005.jpg 8729teatreeoilantisepticcream25g.jpg
LsyHP 11:41:52 /tmp/test/img
kent$  ls -1|sed -r 's/(.*)....(\.jpg)$/mv & \1\2/'|sh
LsyHP 11:41:57 /tmp/test/img
kent$  ll
total 0
drwxr-xr-x 2 kent kent 120 Jan  4 11:41 ./
drwxr-xr-x 3 kent kent 160 Jan  4 11:41 ../
-rw-r--r-- 1 kent kent   0 Jan  4 11:41 006103insettedryshampoo-blossom.jpg
-rw-r--r-- 1 kent kent   0 Jan  4 11:41 008299bathmassagesponges-3pack.jpg
-rw-r--r-- 1 kent kent   0 Jan  4 11:41 008507colgatetripleactiontoothpaste.jpg
-rw-r--r-- 1 kent kent   0 Jan  4 11:41 8729teatreeoilantisepticcream25g.jpg

答案 1 :(得分:0)

另一种方法,假设您的所有文件都是.jpg,您只需删除最后一个8并替换为.jpg

echo "006103insettedryshampoo-blossom7096.jpg" |sed -r 's/.{8}$/.jpg/'

答案 2 :(得分:0)

尝试这种方法

rename 's/....\.jpg$/.jpg/' 006103insettedryshampoo-blossom7096.jpg

<强>输出:

006103insettedryshampoo-blossom.jpg