bash - 在命令行上使用大括号扩展移动文件

标签 bash brace-expansion

我有一个关于为什么这不起作用的问题。也许,这是一个简单的答案,但我似乎无法弄清楚。

我想移动我拥有的几个文件。它们都具有相同的文件名(假设为 file1),但它们都位于不同的目录中(假设为/tmp/dir1、dir2 和 dir3)。如果我要单独移动这些,我可以做一些类似的事情:

mv/tmp/dir1/file1/tmp

这有效。但是,我有多个目录,它们最终都会出现在同一个位置......而且我不想覆盖。所以,我尝试了这样的事情:

mv/tmp/{dir1,dir2,dir3}/file1/tmp/file1.{a,b,c}

当我尝试这个时,我得到:

/tmp/file1.c 不是目录

只是为了澄清...这也有效:

mv/tmp/dir1/file1/tmp/file1.c

很确定这与大括号扩展有关,但不确定原因。

谢谢

最佳答案

只需执行 echo 即可了解 shell 如何扩展:

$ echo mv /tmp/{dir1,dir2,dir3}/file1 /tmp/file1.{a,b,c}
mv /tmp/dir1/file1 /tmp/dir2/file1 /tmp/dir3/file1 /tmp/file1.a /tmp/file1.b /tmp/file1.c

现在您可以看到您的命令不是您想要的,因为在 mv 命令中,目标(目录或文件)是最后一个参数。

关于bash - 在命令行上使用大括号扩展移动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55856209/

相关文章:

linux - 更改 while 循环内的变量

bash - sh/Bash shell 脚本中的 !#(重磅)是什么意思?

java - bash: 导出: `“JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home” ': 不是有效的标识符

linux - wget URL 中的多括号扩展

bash - 如何在 fish shell 中生成字母序列表

linux - 在 Linux 中使用 ssh 在本地服务器上执行远程脚本

bash - 为什么在同一行变量赋值后 shell 内置冒号命令 ":"会导致分配空字符串值?

linux - 是否可以使用程序输出作为大括号扩展的值?

bash - 带 $@ 参数的大括号扩展

algorithm - 如何将嵌套大括号递归扩展为笛卡尔积