![如何将找到的文件移动到另一个目录?](https://linux22.com/image/1018529/%E5%A6%82%E4%BD%95%E5%B0%86%E6%89%BE%E5%88%B0%E7%9A%84%E6%96%87%E4%BB%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
大家好,我有以下脚本,除了 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
(-print0
并xargs -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 {} +
免责声明:我没有检查你的脚本的其余部分。