我正在遍历目录并将旧文件移动到不同的位置。例如。/a/b/c/d.txt
位于我想要/x/a/b/c/d.txt
无错误地移动到的路径中的文件。是否可以通过单个命令实现?如果mv
不起作用,那么cp
和的组合rm
会起作用吗?
- 一次只需要移动一个文件。
- 如果 dest 树已经存在,那么它不应该引发错误。
- 如果 dest 树不存在,则创建。
这个帖子似乎没有满足要求。我也可以通过多行代码来完成此操作。那么是否可以有一种预定义的单行选项呢? (想要将其与编程语言集成)
答案1
如果您只需要使用标准命令,可能不是您正在寻找的内容,但rsync
可能会有所帮助:
$ mkdir a a/b a/b/c; echo foo >a/b/c/d.txt; tree a
a
└── b
└── c
└── d.txt
2 directories, 1 file
$ rsync --relative --remove-source-files a/b/c/d.txt x/
$ tree a x
a
└── b
└── c
x
└── a
└── b
└── c
└── d.txt
5 directories, 1 file
来自手动的:
--relative, -R
使用相对路径。这意味着命令行上指定的完整路径名将发送到服务器,而不仅仅是文件名的最后部分。 ...
和
--remove-source-files
这告诉 rsync 从发送端删除属于传输一部分且已在接收端成功复制的文件(即非目录)。