我正在尝试在一个路径中查找特定目录,然后使用 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
比每次进行实际磁盘搜索要快得多。