使用 move 命令通过 find 移动所有文件和子目录

使用 move 命令通过 find 移动所有文件和子目录

我有一个/home/storage/aggregate_data包含许多子文件夹的文件夹,这些子文件夹又包含许多文件和子文件夹。

我想使用命令将文件夹中超过 90 天的所有文件复制/home/storage/aggregate_data到新文件,因为参数列表可能很长。/home/storage_new/aggregate_datafind

我正在使用命令

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具有自动执行此操作的逻辑,它确实是一个备份工具。

相关内容