删除部分文件名

时间:2015-10-21 20:42:17

标签: bash

我有多个这样的文件

2015-01-20 18.09.16 (deleted 0c279a06bf811a0c2c42bfe0d0b8af55).jpg

2015-01-20 18.09.25 (deleted c1e0789f84cf958b170c3a44d9f99bcc).jpg

2015-01-20 18.09.30 (deleted 2927f32e0378ce3e5c1625a3efe65035).jpg

2015-02-11 16.03.14 (deleted 05d37b666219f537a92e10657ebf0205).jpg

如何在日期之后删除所有内容?我希望我的文件看起来像这样:

2015-02-14 16.26.15.jpg

2 个答案:

答案 0 :(得分:1)

这是一个选项:

for F in 2015*\(deleted*\).jpg ; do mv "$F" "${F/ (deleted*)/}" ; done

我会事先使用echo进行测试:

for F in 2015*\(deleted*\).jpg ; do echo mv "$F" "${F/ (deleted*)/}" ; done

如果您希望模式匹配更多文件(例如,2014年)或更少文件(例如,需要完整日期匹配),我将首先进行测试。我使用了上面的一个简单模式(2015*\(deleted*\).jpg)来希望明确基本概念。

答案 1 :(得分:0)

这是一种方法

ls *.jpg | while read OLD
do
  NEW=$(echo $OLD | sed 's/.*\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*\(\.jpg\)/\1\2/')
  echo "NEW: $NEW"
done

如果名称看起来不错,您可以将echo语句替换为“mv $ OLD $ NEW”