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

1 unix mv rust

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

这是为了移动目录中的前五个文件,并且它在 shell 中运行良好。我正在使用Command流程生成器,但以下代码在运行时失败:

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

输出:

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

Mas*_*inn 5

与几乎所有此类结构一样,是家族所遵循的Command前端,这意味着它执行一个命令,它不是子 shell,并且不会委托给 shell。forkexec*

如果您想链接多个命令,则必须单独运行它们并手动连接它们,尽管存在提供 shell 样式界面的库(这意味着危险和低效率)。

无法正确理解为什么你会在这里烦恼,所有这些似乎都很容易做到std::fs(并且可能是一小部分std::env)例如

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