将目录的内容移动到另一个目录

将目录的内容移动到另一个目录

我想将所有内容(包括文件和子目录)从 移动/home/storage_new/nidhal/foldertest//home/storage_new/nidhal/foldertest1/

当我使用命令时...

while true; do
    find /home/storage_new/nidhal/foldertest/ -mtime +3 -exec mv -t /home/storage_new/nidhal/foldertest1/ {} + 2>/dev/null
    sleep 300
done

...它正在创建类似foldertest内容。我只想要 类似内容的内容foldertest1../foldertest1/foldertest/ContentInsidefoldertestfoldertest1../foldertest1/ContentInside

我应该对我的命令做哪些修改?

答案1

您的命令将为其中的每个文件和目录创建一个错误foldertest,因为您首先移动包括内容在内的整个目录,然后复制里面的所有文件,而这些文件不再存在。

您看不到错误,因为您将所有错误消息都发送至/dev/null with 2>/dev/null

此外,它不会关心-mtime +3目录内容的限制。


如果你需要该约束,您可以使用一个简单的mv -t TARGET SOURCE/*


如果您需要约束,它会更复杂一些,因为您需要mv每个文件并创建它的目标目录,您可以使用find -type f

cd /home/storage_new/nidhal/foldertest/
find . -type f -mtime +3 -exec sh -c '
    for f; do
        t=/home/storage_new/nidhal/foldertest1/${f%/*}
        mkdir -p "$t"
        mv -v -t "$t" "$f"
    done
' find-sh {} +

然后删除空目录:

find . -type d -empty -delete

相关内容