Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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中将函数用作参数_Bash - Fatal编程技术网

在Bash中将函数用作参数

在Bash中将函数用作参数,bash,Bash,我想把几个文件从点a移到点b 但我必须手动指定 mv /full/path/from/a /full/path/to/b 但有时有20个文件我必须手动移动。我不能只输入a函数而不是/full/path/form/a,该函数返回我想在本例中移动的所有文件 /full/path/to/b是一个目录,它是所有扩展名为mp3、exe和mp4的文件必须转到的目标目录: mv ls *.{mp3,exe,mp4} /full/path/to/b 如果我必须移动几个文件,但我不想一个接一个地移动,我如何优

我想把几个文件从点a移到点b

但我必须手动指定

mv /full/path/from/a /full/path/to/b
但有时有20个文件我必须手动移动。我不能只输入a函数而不是/full/path/form/a,该函数返回我想在本例中移动的所有文件

/full/path/to/b是一个目录,它是所有扩展名为mp3、exe和mp4的文件必须转到的目标目录:

mv ls *.{mp3,exe,mp4} /full/path/to/b

如果我必须移动几个文件,但我不想一个接一个地移动,我如何优化问题?

您问题中的命令
mvls*{mp3,exe,mp4}/full/path/to/b
不正确。
正如@janos在评论中指出的,正确的命令是

mv *.{mp3,exe,mp4} /full/path/to/b
如果文件确实丢失和/或路径不可访问或无效,
mv
可能会抱怨文件丢失。
根据您的问题描述,我可以理解,如果您手动转到源路径,您可以将文件移动到所需的目录。
这样看来,路径是有效的,文件是存在的

为了
mv
不断抱怨
*.mp3未找到
(具有有效的路径和文件),我脑海中弹出的唯一原因是Bash路径名扩展功能(在我的Debian中默认启用)

可能由于某种原因,此路径名扩展bash功能在您的计算机中被禁用

尝试使用下面的命令启用此功能,并向mv提供正确的命令,您应该会没事的

$ set +f

PS:检查有关路径名扩展的
manbash

如果
/full/path/to/b
是一个目录,那么您只需执行
mv*{mp3,exe,mp4}/full/path/to/b
。但我想这并不是你所需要的。你解释得不太清楚。你不明白哪一部分?我不明白源文件
*.{mp3,exe,mp4}
示例中的
/full/path/to/b
应该是什么。如果您添加了一个手动重命名2个具体文件的示例,它会有所帮助。不,我不想重命名我想移动,/full/path/to/b是一个目录,它是一个目标目录,所有扩展名为mp3、exe和mp4的文件都必须移动,重命名是相同的,同义词。我在第一个命令中给你的命令会做你需要的。@harton你可以通过
set-f
撤销。但是,如果仍然不工作,路径名扩展可以在开始时处于活动状态,您不需要禁用它。在源代码目录中,您是否使用
ls*.mp3
获得一些输出?目录中有mp3文件吗?@harton您也可以将
set-x
应用到bash提示符以进行调试。使用此
-x
选项,bash将为要执行的每个步骤通知您以
+
开头的消息。我认为它不起作用,因为我遇到了一些错误,但出现这些错误是因为没有具有mp3、exe和mp4扩展名的文件