对大括号在 shell 中的工作方式的误解
Misunderstanding in how curly braces work in 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
我这里有点误会。所以,我执行这些命令:
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