我想将所有内容(包括文件和子目录)从 移动/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/ContentInside
foldertest
foldertest1
../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