如何将找到的文件移动到另一个目录?

如何将找到的文件移动到另一个目录?

大家好,我有以下脚本,除了 mv 参数外,其他都运行良好。该脚本基本上搜索在特定时间创建的文件,我需要将所有创建的文件移动到另一个名为timefile

脚本:

#!/bin/bash
read -rp 'hour ([0]0-23): ' hour
case $hour in
  (0|00)
    find /home/mikepnrs -newermt "yesterday 23:59" \
      ! -newermt 0:59 ;;
  (0[1-9]|1[0-9]|2[0-3])
    find /home/mikepnrs -newermt "$((10#$hour-1)):59" \
      ! -newermt "$hour:59" | mv -t /home/mikepnrs/timefile ;;
  (*)
    printf 'invalid hour: %s\n' "$hour"
esac

语法mv -t /home/mikepnrs/timefile似乎不起作用。我得到的错误是 mv 缺少文件操作数。

有什么解决办法吗?

答案1

您的管道 ( find ... | mv ...) 表示将 的 STDOUT 发送find到 的 STDIN mv。但mv不接受来自 STDIN 的文件,只接受参数。

可以使用以下方法将 STDIN 转换为参数xargs

find ... -print0 | xargs -0 mv -t target

-print0xargs -0使用管道以空分隔而不是以换行符分隔的输出,因为换行符是文件名的有效字符)。

首选方案只需使用find -exec

find ... -exec mv -t target {} +

就你的情况而言:

find /home/mikepnrs -newermt "$((10#$hour-1)):59" \
  ! -newermt "$hour:59" -exec mv -t /home/mikepnrs/timefile {} +

免责声明:我没有检查你的脚本的其余部分。

相关内容