我正在尝试使用单个命令行一次将特定文件名从一个目录移动到另一个目录。我已经在一个变量中捕获了文件名(没有完整路径),如下所示,它可能有 100 到 1000 个文件名。
var="M1.txt,A2.dat,T300.log"
我尝试按照命令运行 mv /home/rrajendr/test1/{M1.txt,A2.dat,T300.log} /home/rrajendr/test2/
Same 如果参数化则不起作用 mv /home/rrajendr/test1/{"$var"} /home/rrajendr/test2/
错误 mv: cannot stat '/home/rrajendr/test1/{M1.txt,A2.dat,T300.log}: 没有那个文件或目录
它正在寻找一个与“{M1.txt,A2.dat,T300.log}”完全一样的文件名,它不会解释为单独的文件名。 这里缺少一些东西,请告诉我
我尝试了以下选项但没有成功
mv /home/rrajendr/test1/
echo $var
-t /home/rrajendr/test2/
mv /home/rrajendr/test1/{$var}
mv /home/rrajendr/test1/{
echo $var
}
我正在寻找这个选项的原因
如果您正在创建文件列表并且知道列表中没有有趣的字符,我会使用
eval
:
cmd="mv /home/rrajendr/test1/{$var} /home/rrajendr/test2"
eval $cmd
甚至
eval "mv /home/rrajendr/test1/{$var} /home/rrajendr/test2"
请注意,截至 2023 年,大括号扩展(还)不是 POSIX shell 功能。这仅在您的 sh 是 bash 或 zsh 或任何其他支持大括号扩展的 shell 时才有效。
我想说的是,要做到这一点,中断机会要少得多,正确的方法是循环或使用
xargs
。你为什么要避免这种情况?移动文件永远不会成为瓶颈。