我想做这样的事情来移动最后两个下载的文件:
mv ` ls -rt ~/Downloads/ | tail -2 ` .
Run Code Online (Sandbox Code Playgroud)
不幸的是,ls只给出了文件名。如何修改上面的代码?
(在有人指出它之前,我知道管道输出的问题ls。我只会在我知道有问题的文件名时使用它。)
小智 12
好的,所以如果你不放弃ls,那么至少尝试摆脱对所有事情都使用反引号的习惯,尤其xargs是在更合适的情况下:
ls -rtd ~/Downloads/* | tail -n2 | xargs -I{} mv {} .
Run Code Online (Sandbox Code Playgroud)
您可以find在那里使用 GNU :
mv $(find ~/Download -mindepth 1 -maxdepth 1 -printf '%Ts %p\n' | sort -n | cut -d ' ' -f2- | tail -n 2) .
Run Code Online (Sandbox Code Playgroud)
该find -printf选项:
%Ts将时间显示为纪元%p 文件路径看 man find | less +/'^ *-printf'
编辑
如果您需要处理文件名中的空格,我推荐另一个解决方案:
find -maxdepth 1 -printf '%Ts %p\n' |
sort -n |
cut -d ' ' -f2- |
tail -n 2 |
xargs -i% mv % .
Run Code Online (Sandbox Code Playgroud)