在Bash中将函数用作参数
我想把几个文件从点a移到点b 但我必须手动指定在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 如果我必须移动几个文件,但我不想一个接一个地移动,我如何优
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扩展名的文件