Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 无法使用$myvar.**来管理以$myvar开头的文件__Bash_Mv - Fatal编程技术网

Bash 无法使用$myvar.**来管理以$myvar开头的文件_

Bash 无法使用$myvar.**来管理以$myvar开头的文件_,bash,mv,Bash,Mv,我正在尝试使用mv将以$week开头的文件移动到另一个文件夹 所以我有一个文件名为: week=$(date +%W) 开头的数字是一周的数字。所以我想使用mv将它从当前所在的目录移动到/mydir/week25/: 但是我得到了一个统计错误。问题 当你说 mv /mydir/$week\_.* /mydir/week$week; 您正在使用语法$var\\\\.*或${var}\..*如果不想转义下划线,则尝试使用globbing,但由于使用正则表达式语法而失败 解决方案 如中所述,使用g

我正在尝试使用mv将以$week开头的文件移动到另一个文件夹

所以我有一个文件名为:

week=$(date +%W)
开头的数字是一周的数字。所以我想使用mv将它从当前所在的目录移动到/mydir/week25/:

但是我得到了一个统计错误。

问题 当你说

mv /mydir/$week\_.* /mydir/week$week;
您正在使用语法$var\\\\.*或${var}\..*如果不想转义下划线,则尝试使用globbing,但由于使用正则表达式语法而失败

解决方案 如中所述,使用globbing。就是

分词后,除非设置了-f选项,否则请参见集合 内置的Bash会扫描每个单词中的字符“*”、“?”和“[”。 如果出现其中一个字符,则该单词被视为 模式,并替换为按字母顺序排序的文件名列表 匹配模式,请参见

或者,使用${}定义变量名称的范围:

mv /mydir/$week\_* /mydir/week$week;
#                ^
另一种方法 您只需要一个表达式,如:

mv /mydir/${week}_* /mydir/week$week;
#          ^    ^ ^
因为${week}\u*将扩展到以$week plus开头的文件名

请参见一个示例:

for file in ${week}_*; do
   mv "$file" /mydir/week"${week}"/
done
问题 当你说

mv /mydir/$week\_.* /mydir/week$week;
您正在使用语法$var\\\\.*或${var}\..*如果不想转义下划线,则尝试使用globbing,但由于使用正则表达式语法而失败

解决方案 如中所述使用全局搜索。即

分词后,除非设置了-f选项,否则请参见集合 内置的Bash会扫描每个单词中的字符“*”、“?”和“[”。 如果出现其中一个字符,则该单词被视为 模式,并替换为按字母顺序排序的文件名列表 匹配模式,请参见

或者,使用${}定义变量名称的范围:

mv /mydir/$week\_* /mydir/week$week;
#                ^
另一种方法 您只需要一个表达式,如:

mv /mydir/${week}_* /mydir/week$week;
#          ^    ^ ^
因为${week}\u*将扩展到以$week plus开头的文件名

请参见一个示例:

for file in ${week}_*; do
   mv "$file" /mydir/week"${week}"/
done

下面是使用find的另一种选择


下面是使用find的另一种选择


我不明白,为什么我不能简单地使用mv命令?@Chud37啊,你也可以说mv${week}*/your/dir。@fedoqui!再次感谢。不是他。*而不仅仅是*引起了问题:PIt应该仍然是${week}∗∗∗或者,对于非数值或包含数字的IFS,更偏执,${week}_*-否则,week=1将匹配week=10的文件,因为不需要下划线直接跟在数字后面。我不明白,为什么我不能简单地使用mv命令?@Chud37啊,你也可以说mv${week}*/your/dir.@fedoqui!再次感谢。是他。*而不仅仅是*引起了问题:PIt应该仍然是${week}\uu*或者,对于非数值或包含数字的IFS,更偏执一些,${week}_*-否则,week=1将匹配week=10的文件,因为不要求下划线直接跟在数字后面。您的glob不好:mv/mydir/${week}_*/mydir/week$week无句号!这是一个glob,不是regex。@gniourf_gniourf你做到了!我没有注意到这个错误。你应该发布一个解释的答案this@fedorqui:不是真的……照目前的情况,这个问题应该作为离题而结束,因为这只是一个印刷错误。我不确定这个问题是否可以改写,以便对si有利te.@gniourf_gniourf某物,其标题类似于“${var}”为什么不存在。*扩展到以$var开头的文件名应该是正确的。@fedorqui:好的!但是你要写答案!我已经高估了你的答案,所以我不能再高估了。你的glob不好:mv/mydir/${week}_*/mydir/week$week无句号!这是一个glob,不是regex。@gniourf_gniourf你做到了!我没有注意到这个错误。你应该发布一个解释的答案this@fedorqui:不是真的……照目前的情况,这个问题应该作为离题而结束,因为这只是一个印刷错误。我不确定这个问题是否可以改写,以便对si有利te.@gniourf_gniourf一些标题为“${var}”的东西。*扩展到以$var开头的文件名应该是正确的。@fedorqui:好的!但是你要写答案!我已经对你的答案进行了投票,所以我不能再投票了。
week=25 && find /mydir -type f -not -path "/mydir/week*" \
-name "$week*zip" -exec mv {} "/mydir/week$week" \;