mv:不能用非目录覆盖目录

时间:2013-12-20 14:22:27

标签: linux bash file move

是否有可能解决这个问题?

我有一种情况需要将一些文件移到下面的1个目录中。

/a/b/c/d/e/f/g

问题是g/目录中的文件名与目录名

相同

我收到以下错误:

mv: cannot overwrite directory `../297534' with non-directory

示例: / home / user / data / doc / version / 3766/297534是一个目录,里面还有一个名为297534的文件

所以我需要将此文件移至/ home / user / data / doc / version / 3766

命令 这就是我正在运行的:(在for循环中)

cd /home/user/data/doc/version/3766/297534
mv * ../

2 个答案:

答案 0 :(得分:11)

您无法强制mv使用具有相同名称的文件覆盖目录。在使用mv命令之前,您需要删除该文件。

答案 1 :(得分:0)

在循环中再添加一个图层。

mv * ../替换为

for f in `ls`; do rm -rf ../$f; mv $f ..; done

这将确保首先删除任何冲突,假设您不关心要覆盖的目录。

请注意,如果您当前目录中的文件恰好与当前目录的名称匹配,则此爆炸。例如,如果您在/home/user/data/doc/version/3766/297534,并且您正在尝试移动名为297534的目录。一种解决方法是为每个文件添加一个长后缀,因此匹配的可能性很小

for f in `ls`; do mv $f ../${f}_abcdefg; done