我有一个/home/storage/aggregate_data
包含许多子文件夹的文件夹,这些子文件夹又包含许多文件和子文件夹。
我想使用命令将文件夹中超过 90 天的所有文件复制/home/storage/aggregate_data
到新文件,因为参数列表可能很长。/home/storage_new/aggregate_data
find
我正在使用命令
find /home/storage/aggregate_data/* -mtime +90 \
-exec mv -v '{}' /home/storage_new/aggregate_data/ \;
问题在于,某些文件的目录结构在移动后得以保留,而另一些文件则不然。
例如:最初位于路径中的文件/home/storage/aggregate_data/rrc/rrc_daily/imsi_rrc/imsi_rrc_daily_2022_01_02.parquet
被移动到/home/storage_new/aggregate_data/imsi_rrc_daily_2022_01_02.parquet
与预期不同的位置/home/storage_new/aggregate_data/rrc/rrc_daily/imsi_rrc/imsi_rrc_daily_2022_01_02.parquet
。
我也尝试过
find /home/storage/aggregate_data/ -mtime +90 \
-exec mv -v '{}' /home/storage_new/ \;
为什么只有部分文件和文件夹而不是全部会出现此问题?
我怎样才能实现我的目标?
答案1
当您移动目录时,作为移动目录的副作用,该目录下包含的所有文件和目录都将被移动。
当您移动文件时,只有该文件被移动到目标目录,不会创建目录层次结构,文件只是被移动到目标文件夹,就像上面的目录场景一样,但是没有副作用,就像上面的一个目录。
您可以编写自己的脚本 - 只是为了正确执行移动,如果目标层次结构尚不存在则创建它。然后mv
在你的 find 的 -exec 中使用它而不是普通的。
rsync
具有自动执行此操作的逻辑,它确实是一个备份工具。