如何将目录中的前五个文件移动到新目录?
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
与几乎所有此类结构一样,Command
是 fork
的前端,后跟 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()))?;
}
我正在尝试在 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
与几乎所有此类结构一样,Command
是 fork
的前端,后跟 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()))?;
}