使用通配符移动文件?

使用通配符移动文件?

哦哦,我读了几页和问题,但我就是无法理解/完全理解它......

jdir0="$@"  # /home/tor/subbackup/teest2/jjj
mv  "$jdir0/subs/*.srt" /home/tor/subbackup/

mv:无法统计'/home/tor/subbackup/teest2/jjj/*.srt':没有这样的文件或目录

嗯,呃,是的,那里有一个 test2.srt ..

我看过几页有大量不同的解决方案,据我了解,这应该翻译为(第一个移动命令):

mv /home/tor/subbackup/teest2/jjj/subs/test2.srt /home/tor/subbackup/

这个在终端上工作得很好..

(第一个移动命令),但我无法让它在脚本中工作..我做错了什么?

答案1

jdir0="$@"

"$@"扩展到全部脚本的位置参数/参数。当您将其分配给单个变量时,Bash 会将它们用空格连接起来。你可能只想$1在这里。

mv "$jdir0/subs/*.srt"

变量扩展确实应该被引用,因为它可以防止分词,并且如果变量包含看起来像 glob 的东西,则可以防止通配符。但在这里,您可能希望硬编码的 glob 能够工作,所以它应该不是被引用。

因此,将星号留在引号之外,例如

mv "$jdir0"/subs/*.srt

或例如

mv "$jdir0/subs/"*.srt

两者的工作原理相同,使用您认为更好的变体。

相关内容