使用 find 命令移动目录

使用 find 命令移动目录

我正在尝试在一个路径中查找特定目录,然后使用 find 将目录移动到其他路径中。

源目录如下所示,

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

我正在尝试查找 date1 目录并移动到目标

/备份/源1/目录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

Linux 手册页状态:

mv——移动(重命名)文件

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

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

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

   mkdir /Backup/source1/$SRC_DIR

前提是您有权限这样做:事实上,上面的错误消息是关于您没有足够的权限来创建新文件(它应该是一个文件夹,但由于上面的错误而变成了一个文件)。您确定新的 /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]* 

现在目录是空的,可以删除了。

答案2

不要使用 move 这个很笨的工具,而是使用 rsync,它可以在存档模式下移动目录树,从而保留权限以及软硬符号链接。

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

相关内容