从文件中删除所有其他扩展

时间:2018-06-07 18:10:57

标签: linux bash

我的文件有任意数量的扩展程序

a.jpg
b.jpg.jpg
c.jpg.jpg.png
...

我需要删除第一个以外的所有扩展程序

a.jpg
b.jpg
c.jpg
... 

我目前有以下内容来查找带有附加扩展名的文件

find . -type f -name "*.*.*"
find . -type f -name "*.*.*.*"
find . -type f -name "*.*.*.*.*"
...

我不确定如何制作更清洁的版本。文件名中的唯一句点就在扩展名之前,所以我可以在上面的find命令中选择包含regex和-exec mv的第一个扩展名,但我不知道如何执行此操作。

2 个答案:

答案 0 :(得分:1)

如果您有rename实用程序,则可以使用:

rename -n 's/([^.]*\.[^.]+).+/$1/' *.*.*

对输出感到满意后,删除-n(空运行)。

如果您没有rename,那么您可以像这样使用sed

for i in *.*.*; do
    echo mv "$i" "$(sed -E 's/([^.]*\.[^.]+).+/\1/' <<< "$i")"
done

在您对输出感到满意后删除echo

答案 1 :(得分:0)

extglob使用{{3}}:

#sort_buffer_size=8M  # lead with # for default size
#join_buffer_size=8M  # lead with # for default size
thread_cache_size=100  # from autocalc to reduce threads_created of 158K
innodb_buffer_pool_size=3G  # from ~2G  for growth and only 75% available for data
innodb_lru_scan_depth=512  # from 1024 to minimize CPU busy every second
key_buffer_size=64M  # from 8M - you have 32M MyISAM indexes
key_cache_age_threshold=84600  # from 300 seconds to reduce key_reads
query_cache_min_res_unit=512  # from 4096 to increase QC results capacity
innodb_log_buffer_size=16M  # from 8M suggested by Mysqltuner
table_open_cache=2K  # from 1K to reduce tables_opened count
innodb_purge_threads=4  # from 1 to keep up with activity
innodb_flushing_avg_loop=10  # from 30 to keep up with activity