如何将目录中的前五个文件移动到新目录?

How can I move the first five files in a directory to a new directory?

我正在尝试在 Rust 中复制 bash 命令 mv `ls | head -5` ./subfolder1/

这是为了移动目录中的前五个文件,它在 shell 中工作正常。我正在使用 Command 流程构建器,但以下代码在运行时失败:

Command::new("mv")
    .current_dir("newdir")
    .args(&["`ls | head -5`", "newdir"])
    .env("PATH", "/bin")
    .spawn()

输出:

mv:  cannot stat cannot stat '`ls | head -5`': No such file or directory

与几乎所有此类结构一样,Commandfork 的前端,后跟 exec* 系列,这意味着它执行 one 命令,它不是子 shell,它不委托给 shell.

如果你想链接多个命令,你将不得不单独 运行 它们并手动连接它们,尽管 there exist libraries to provide a shell-style interface(这意味着危险和低效)。

尽管无法正确理解您为什么要在这里打扰,所有这些似乎都相当容易 std::fs (and possibly a smattering of std::env) 例如

for entry in fs::read_dir(".")?.take(5) {
    let entry = entry?;
    fs::rename(entry.path(), dest.join(entry.file_name()))?;
}