繁体   English   中英

如何将所有文件从一个目录移动(并覆盖)到另一个目录?

[英]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/

如果您想查看正在执行的操作,请使用-vmv -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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM