在Bash中使用函数作为参数

时间:2017-02-04 20:27:59

标签: bash

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

但我必须手动指定

using System;
using System.Drawing;
using System.Windows.Forms;

namespace EpicGame
{
  public partial class MainWindow : Form
  {
    public MainWindow()
    {
        InitializeComponent();
    }

    public void MainWindow_Load(object sender, EventArgs e)
    {
        int EntityCount = 0;
        Background.ImageLocation = "Background.jpg";
        Background.SizeMode = PictureBoxSizeMode.AutoSize;

        Spawn(600, 600, EntityCount, "Player 1.png"); EntityCount++;
    }

    // Controls
    public void MainWindow_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.D) MoveRight();
        entityPicture.Location = new Point(X, Y);
    }

    // Movement
    public void MoveRight()
    {
        X++;
    }

    // Entity spawning
    public void Spawn(int X, int Y, int ID, string Path)
    {
        PictureBox entityPicture = new PictureBox();
        Image Entity = Image.FromFile(Path);
        entityPicture.Image = Entity;
        entityPicture.SizeMode = PictureBoxSizeMode.AutoSize;
        entityPicture.Location = new Point(X, Y);
        entityPicture.BackColor = Color.Transparent;
        Controls.Add(entityPicture);
        entityPicture.BringToFront();
    }

    private void Background_Click(object sender, EventArgs e)
    {

    }
  }
}

但有时我需要手动移动20个文件。而不是 / full / path / form / a ,我只能输入一个函数,它返回我想要移动的所有文件;

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

mv /full/path/from/a /full/path/to/b

如果我要移动几个文件并且我不想一个接一个地执行,我该如何优化问题呢?

1 个答案:

答案 0 :(得分:2)

您问题中的mv ls *.{mp3,exe,mp4} /full/path/to/b命令不正确 正如@janos的评论中指出的那样,正确的命令是

mv *.{mp3,exe,mp4} /full/path/to/b
如果文件确实丢失和/或路径无法访问或无效,

mv可以抱怨丢失文件。
我可以通过您的问题描述理解,如果您手动转到源路径,您可以将文件移动到所需的目录 因此,似乎路径有效,文件存在。

为了让mv继续抱怨*.mp3 not found(拥有有效的路径和文件),我脑子里弹出的唯一原因是Bash路径名扩展功能(我的Debian默认启用) 。

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

尝试使用命令bellow启用此功能并向mv提供正确的命令,您应该没问题。

$ set +f

PS:检查man bash有关路径名扩展的信息。