大家好,我有以下脚本,除了 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 {} +
免责声明:我没有检查你的脚本的其余部分。