使用修剪后的名称重命名目录

使用修剪后的名称重命名目录

我有许多子目录,其中每个目录的名称末尾都包含一个时间。我想删除这个。是否有捷径可寻?

.
├── ACRA
│   └── acra2017-12-25 16:01:57
├── Activiti
│   └── Activiti2017-05-02 17:15:37

.
├── ACRA
│   └── acra2017-12-25
├── Activiti
│   └── Activiti2017-05-02

答案1

find . -type d -name '*[0-2][0-9]:[0-5][0-9]:[0-5][0-9]' -exec sh -c '
    for d; do mv -- "$d" "${d% *}"; done
' findsh {} +

在实际运行脚本之前,您可以在和echo之间添加一个以确保应用正确的操作。domvmv

  • -type d:仅选择目录
  • -name '*[0-2][0-9]:[0-5][0-9]:[0-5][0-9]':一个全局模式,仅匹配末尾带有时间的名称。
  • for d; do mv -- "$d" "${d% *}"; done:对于找到的每个目录,应用该mv操作,重命名它。从文件名中删除${d% *}最后一个空格之后(包括)的所有内容。

答案2

使用findPerlrename实用程序:

find . -type d -name "* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]" \
  -exec rename -n 's/ \d{2}:\d{2}:\d{2}$//' {} \;

-n如果输出看起来符合预期,请删除该选项。

相关内容