使用find命令移动目录


0

我试图在一个路径中找到特定目录,并使用find在其他路径中移动目录。

源目录如下所示,

/Dir1/country1/month1/date1,date2,date3
/Dir1/country2/month1/date1,date2,date3
...
.
.
/Dir1/country10/month1/date1,date2,date3

我想找到date1目录并移动到目的地

/备份/ source1中/方向1 /

我正在使用下面的命令

[root @ mytest Dir1]#find -name“date1”-exec mv {} / Backup / source1 / Dir1 / {} \;

而我正在低于错误。

mv:无法保留`/Backup/source1/Dir1/./country1/month1/date1/date1/date1_1.txt'的所有权:不允许操作

不确定如何删除目标中的date1目录重复,“。/”也会产生问题。

祝福,KJ


1
您获得的错误意味着要么没有使用正确的权限运行,要么目标文件系统无法处理权限。为什么不重新执行find命令来执行cp和rm。
davidgo

Answers:


0

Linux手册页指出:

mv - 移动(重命名)文件

因此,您无法使用mv移动目录。但是,您可以先复制然后删除旧副本。此命令

   SRC_DIR=$(find . -type d -name date1 -print); echo $SRC_DIR

将在一个方便的变量中存储您感兴趣的目录的相对路径。现在我们可以将目录放在新位置,

   mkdir /Backup/source1/$SRC_DIR

如果你有权这样做:事实上,上面的错误信息是关于你没有足够的优惠来创建一个新文件(它应该是一个文件夹,但由于上面的错误而成为一个文件)。你确定new / Backup / dir1属于你吗?您应该检查并修复它。

现在您可以递归地将所有内容cp到新目录:

   cp -R $SRC_DIR/* /Backup/dir1/$SRC_DIR
   cp -R $SRC_DIR/.[a-Z]* /Backup/dir1/$SRC_DIR

最后,如果你需要,你可以删除旧版本:

   cd $SRC_DIR
   rm -fR *
   rm -fR .[a-Z]* 

现在该目录为空,可以删除。


感谢您的投入。我以root用户身份运行命令,目标目录仅由root拥有。我有很多目录,我需要移动和巨大的尺寸,所以正在寻找一个自动化的过程
KumarJohn

@KJT我建议的命令有用吗?
MariusMatutiae 2013年

0

而不是使用Blu是一个Blunt工具,请查看rsync,它可以在归档模式下移动目录树,从而保留权限以及软和硬符号链接。

此外,如果您updatedb以root身份键入,它将更新locate已安装软件包的各种路径树中的文件数据库。二进制文件,手册页和源树。使用whereislocate比每次执行实际磁盘搜索要快得多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.