移动超过 5 天的文件的脚本

移动超过 5 天的文件的脚本

我目前正在编写一个脚本,该脚本允许我将任何超过 5 天的文件移动到具有相同路径的存档文件夹中,但根文件夹除外,因为根文件夹会发生变化。因此类似于: root/subdir1/subdir2/filerootarchive/subdir1/subdir2/file。它应该可以递归工作。

我已经尝试为“根”文件夹的所有文件创建一个 foreach:

#!/bin/bash
find . -type f -name '*.*' -print0 | while IFS= read -r -d '' file; do
      mv $file ../rootarchive/"$file"
done

但这并没有正常工作,因为我的 mv 命令找不到指定的目的地../rootarchive/"$file"。你们有人知道如何解决这个问题吗?

答案1

您需要从中创建目录树subdir1/subdir2/-mv不会为您执行此操作。例如,您可以执行以下操作:

find . -type f -mtime +5 -print0 | while IFS= read -r -d '' file; do
    dir="${file%/*}"
    mkdir -p ../rootarchive/"$dir"
    mv "$file" ../rootarchive/"$file"
done

你可以rsync。它可以重新创建目录结构并删除复制的文件:

find . -type f -mtime +5 -print0 | 
  rsync -0avP  --remove-source-files --files-from=- ./ ../rootarchive

为了rsync

  • -0表示文件列表以空字符分隔。这会影响:
  • --files-from=读取要复制的文件列表(来自标准输入-:)。
  • -a启用存档模式,保留文件权限、所有权等。
  • --remove-source-files删除已复制的文件成功地从源头。
  • -vP启用详细模式和进度信息。

相关内容