我正在尝试移动“Pictures/”中最近修改的文件。这是我尝试过的:
find Pictures/ -maxdepth 1 -type f -mmin -60 -print0|tail -1| xargs -0 -I {} mv "{}" Dropbox/somefolder/
这不起作用,而且这不是理想的解决方案,因为我猜测该文件在过去一小时内已被修改。
我收到此错误:
mv: cannot stat 'Pictures/file.jpg' : No such file or directory
谢谢!
答案1
如果您使用-print0
,tail
将不起作用,因为您的输出不包含换行符(除非您的文件路径包含换行符,因为某些不太可能的原因)。
假设文件路径中不包含换行符,使用GNUfind
和sort
:xargs
find ~/Pictures -type f -printf '%T@ %P\n' | \
sort -k 1nr | sed 's/^[^ ]* //' | head -n 1 | xargs -I {} mv "{}" ~/Dropbox
如果你有 Zsh,那就很简单了 —— 同样,不允许换行:
mv -- "$(print -l **/*(.om) | head -n 1)" ~/Dropbox
这里,**/*
是一个递归表达式,括号内是限定符:
.
– 常规文件o
– 对文件进行排序m
– 按修改时间
答案2
只要您不需要查找隐藏文件,这样就可以了。
cd /path/to/Pictures
mv "`ls -ltr | grep -v ^d | tail -1 | tr -s ' ' | cut -d ' ' -f9-`" /path/to/dropbox