首页 > 解决方案 > 按名称中的公共子字符串对文件进行分组

问题描述

我有一个此类组织的目录:

header1[pattern1].extension
header1[pattern2].extension
header2[pattern1].extension
header2[pattern2].extension

所以我想将文件移动到以相应模式命名的新目录中:

pattern1
    header1[pattern1].extension
    header2[pattern1].extension

pattern2
    header1[pattern2].extension
    header2[pattern2].extension

问题是我事先不知道模式。我尝试了一个带有 grep 的 for 循环,但我不熟悉 bash 命令,所以我无法将模式保存到变量中并相应地创建新目录。

标签: bash

解决方案


您不需要 grep (或 awk),括号之间的字符串可以使用参数扩展提取。假设没有模式命名不是目录的现有文件,也不是当前目录中目录的符号链接,这应该可以解决问题:

for f in *\[?*]*; do
  d=${f#*\[} d=${d%]*}
  echo mkdir -p -- "$d"
  echo mv -- "$f" "$d"
done

echo如果输出看起来不错,则删除s。


推荐阅读