我知道mv
命令将文件从一个地方移动到另一个地方,但是如何将所有文件从一个目录移动到另一个文件(包含一堆其他文件),如果文件已经存在,是否覆盖?
这只是mv srcdir/* targetdir/
。
如果在srcdir
有太多的文件,你可能想尝试类似于下面的方法:
cd srcdir find -exec mv {} targetdir/ +
与“相反” \;
最后+
以类似xargs
方式收集参数,而不是每个文件执行一次mv
。
对于移动和覆盖文件,它看起来不像是-R
选项(如果有疑问,请通过输入[your_cmd] --help
来检查您的选项。此外,这个答案取决于您想如何移动文件。文件,文件和目录,替换目的地的文件等
当你输入mv --help
它返回所有选项的描述。
对于mv,语法是mv [option] [file_source] [file_destination]
移动简单文件: mv image.jpg folder/image.jpg
将文件夹移动到目标mv folder home/folder
要将源文件中的所有文件移到mv folder/* home/folder/
如果您想查看正在执行的操作,请使用-v
: mv -v
在覆盖之前使用-i
提示: mv -i
使用-u
更新目标中的文件。 它只会移动源文件比目标文件中的文件更新,并且当它不存在时: mv -u
把选项像mv -viu
一样绑在一起
例如,也可以使用rsync
:
rsync -va --delete-after src/ dst/
哪里:
-v
,– --verbose
:增加详细度 -a
,– --archive
:归档模式; 等于-rlptgoD
(no -H,-A,-X
) --delete-after
删除--delete-after
:在传输完成后删除接收端的文件 如果您拥有root权限,则使用sudo
前缀来覆盖潜在的权限问题。
在Linux shell中,许多命令接受多个参数,因此可以使用通配符。 所以,例如,如果你想将文件夹A中的所有文件移动到文件夹B中,你可以这样写:
mv A/* B
如果你想将所有文件移动到某个“外观”,你可以这样做:
mv A/*.txt B
它将所有blablabla.txt文件复制到文件夹B中
星号(*)可以代替任意数量的字符或字母吗? 可以替代一个。 例如,如果在file_number.ext形状中有许多文件,并且只想移动具有两位数字的文件,则可以使用如下所示的命令:
mv A/file_??.ext B
或者更复杂的例子:
mv A/fi*_??.e* B
对于看起来像fi <-something – > _ < – 两个字符 – >。e <-something->的文件
与shell中许多需要-R(例如)复制或删除子文件夹的命令不同,mv本身就是这样做的。
请记住,mv覆盖没有问(除非被覆盖的文件是只读的,或者你没有权限),所以确保你不会在这个过程中失去任何东西。
为了您将来的信息,如果您有要复制的子文件夹,可以使用-R选项,并说要递归执行该命令。 所以它看起来像这样:
cp A/* B -R
顺便说一下,我所说的所有工作都与rm(删除,删除)和cp(复制)一起,并且要小心,因为一旦删除,就没有回头路了! 避免像rm * -R
这样的命令,除非你确定你在做什么。