[英]How to move (and overwrite) all files from one directory to another?
我知道mv
命令可以将文件从一个地方移动到另一个地方,但是如何将所有文件从一个目录移动到另一个目录(有一堆其他文件),如果文件已经存在则覆盖?
mv -f source target
从手册页:
-f, --force
do not prompt before overwriting
它只是mv srcdir/* targetdir/
。
如果srcdir
有太多文件,您可能想尝试以下方法:
cd srcdir
find -exec mv {} targetdir/ +
与\\;
相反\\;
最后的+
以类似xargs
方式收集参数,而不是为每个文件执行一次mv
。
也可以使用rsync
,例如:
rsync -va --delete-after src/ dst/
在哪里:
-v
, --verbose
: 增加冗长-a
, --archive
: 存档模式; 等于-rlptgoD
(没有-H,-A,-X
)--delete-after
: 在传输完成后删除接收方的文件如果您有 root 权限,请加上sudo
前缀以覆盖潜在的权限问题。
对于移动和覆盖文件,似乎没有-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
在一起,如mv -viu
等。
如果您只需要对所有覆盖提示回答“y”,请尝试以下操作:
y | mv srcdir/* targetdir/
在 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->_<-two characters->.e<-something-> 的文件
与 shell 中需要 -R 来(例如)复制或删除子文件夹的许多命令不同, mv 本身会这样做。
请记住, mv 会在不询问的情况下覆盖(除非被覆盖的文件是只读的或您没有权限),因此请确保在此过程中不会丢失任何内容。
为了您以后的信息,如果您有要复制的子文件夹,您可以使用 -R 选项,表示您要递归执行该命令。 所以它看起来像这样:
cp A/* B -R
顺便说一句,我所说的所有内容也适用于 rm(删除,删除)和 cp(复制),请注意,因为一旦删除,就无法回头! 除非您确定自己在做什么,否则请避免使用rm * -R
类的命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.