bash - 对花括号如何在 shell 中工作的误解
问题描述
我在这里有一点误解。所以,我执行这些命令:
mkdir Week\ {1..13}
touch {1..13}.txt
mv {1..13}.txt Week\ {1..13}
我的意图是将 1.txt 移至第 1 周,将 2.txt 移至第 2 周,依此类推,但所有文件最终都位于“第 13 周”目录中,我无法弄清楚它是如何工作的。如果可能的话,谁能给我解释一下?
解决方案
花括号在“大括号扩展”中扩展(请参阅 参考资料man bash
)。所以你的最后一行扩展到
mv 1.txt 2.txt 3.txt ... 13.txt Week\ 1 Week\ 2 ... Week\ 13
如果你调查一下man mv
,你会看到
mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE...
它没有列出类似的东西
mv [OPTION] SOURCE1 DEST1 SOURCE2 DEST2
您可以使用循环将文件分发到目录中:
for n in {1..13} ; do
mv "$n".txt "Week $n"
done
如果您没有对文件做任何其他事情而是创建它们,实际上您可以直接在循环中创建它们,因此您最初不需要在同一目录中创建它们:
for n in {1..13} ; do
mkdir "Week $n"
touch "Week $n/$n.txt"
done
推荐阅读
- c++ - 解释/读取为装配应用程序编写的文本文件
- python - AttributeError:“密集”对象没有属性“形状”(多输入模型)
- r - 传单层控件不切换或显示来自输入的正确数据
- bash - 如果需要,有没有办法在 bash 中查找文件、移动和重命名?
- r - 如何在保存所做编辑的同时将行添加到 DT 包
- c# - 需要以某种方式抵消玩家的移动
- json - Clikhouse + Amazon SNS 通知
- google-apps-script - 用于非规范化 json 数据工作不正常的 Google Apps 脚本功能
- sql - 使用 FUNCTION -SQL Server 查询查找员工的当前职位
- php - Shopware : 通过 ID 获取文件编号