bash - 按名称中的公共子字符串对文件进行分组
问题描述
我有一个此类组织的目录:
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 命令,所以我无法将模式保存到变量中并相应地创建新目录。
解决方案
您不需要 grep (或 awk),括号之间的字符串可以使用参数扩展提取。假设没有模式命名不是目录的现有文件,也不是当前目录中目录的符号链接,这应该可以解决问题:
for f in *\[?*]*; do
d=${f#*\[} d=${d%]*}
echo mkdir -p -- "$d"
echo mv -- "$f" "$d"
done
echo
如果输出看起来不错,则删除s。
推荐阅读
- python - 如何修复错误“'NoneType' 对象没有属性 'text'”
- python - 对于其中一个测试用例,MIT OCW 问题集 1 的预期输出偏离 1
- python - Matplotlib 中的初始 rcParams 与 rcParamsDefault 不同
- r - 您可以在多个条件下使用 substr 吗?
- flutter - 使用颤振 2.+ 的可空值
- javascript - 在 MomentJS 中以 HH:mm 格式比较两次?
- google-sheets - 如何根据 Google 表格上的水平查找返回动态范围?
- javascript - 如何使用可选输入制作自定义日期选择器?反应
- java - 使用 Monte Media Library 录制带有计算机音频的屏幕
- testing - React 原生排毒 Jest 测试