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

l7mqbcuq  于 7个月前  发布在  Unix
关注(0)|答案(6)|浏览(134)

我知道mv命令可以将文件从一个地方移动到另一个地方,但是如果文件已经存在,我如何将所有文件从一个目录移动到另一个目录(其中有一堆其他文件)?

qacovj5a

qacovj5a1#

mv -f source target

字符串
从man page:

-f, --force
          do not prompt before overwriting

t8e9dugd

t8e9dugd2#

只有mv srcdir/* targetdir/
如果srcdir中的文件太多,您可能想尝试以下方法:

cd srcdir
find -exec mv {} targetdir/ +

字符串
\;相反,最终的+以类似xargs的方式收集参数,而不是对每个文件执行一次mv

uqjltbpv

uqjltbpv3#

也可以使用rsync,例如:

rsync -a src/ dst/

字符串
其中:

  • -a--archive:存档模式;等于-rlptgoD(无-H,-A,-X

您可以选择添加以下内容:

  • -v--verbose:增加详细程度
  • --delete-after:在传输完成后删除接收端的文件。这使其成为mv而不是cp,但要注意这将删除dst/目录中的文件。有关不同delete-选项的详细信息,请查看this question

前缀为sudo以覆盖潜在的权限问题。在根文件系统中使用rsync时,请注意您正在做什么。

dl5txlt9

dl5txlt94#

对于移动和重定向文件,它看起来不像有-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等。

aiqt4smr

aiqt4smr5#

在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来(例如)复制或删除JavaScript,mv自己完成。
记住mv会自动覆盖(除非被覆盖的文件是只读的或者你没有权限),所以要确保你在这个过程中不会丢失任何东西。
为了方便以后的学习,如果你有一个你想要复制的命令,你可以使用-R选项,表示你想要递归地执行这个命令。所以它看起来像这样:

cp A/* B -R


顺便说一句,我所说的也适用于rm(删除,删除)和cp(复制),小心,因为一旦你删除,就没有回头路了!避免像rm * -R这样的命令,除非你确定你在做什么。

yx2lnoni

yx2lnoni6#

如果你只需要对所有的覆盖提示回答“y”,试试这个:

y | mv srcdir/* targetdir/

字符串

相关问题