mic*_*nrs 5 command-line bash mv
大家好,除了 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
Run Code Online (Sandbox Code Playgroud)
语法mv -t /home/mikepnrs/timefile
似乎不起作用。我得到的错误是 mv 缺少文件操作数。
任何解决方案?
您的管道 ( find ... | mv ...
) 表示将 STDOUT of 发送find
到mv
. 但mv
不接受来自 STDIN 的文件,只接受参数。
您可以使用xargs
以下方法将 STDIN 转换为参数:
find ... -print0 | xargs -0 mv -t target
Run Code Online (Sandbox Code Playgroud)
(-print0
并xargs -0
通过管道将空分隔而不是换行分隔输出,因为换行符是作为文件名一部分的有效字符)。
但首选的选择是简单地使用find -exec
:
find ... -exec mv -t target {} +
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
find /home/mikepnrs -newermt "$((10#$hour-1)):59" \
! -newermt "$hour:59" -exec mv -t /home/mikepnrs/timefile {} +
Run Code Online (Sandbox Code Playgroud)
免责声明:我没有检查脚本的其余部分。
归档时间: |
|
查看次数: |
228 次 |
最近记录: |