如何使用ls获取相对路径?

Tim*_*Tim 8 linux ls bash

我想做这样的事情来移动最后两个下载的文件:

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)

  • 不鼓励解析`ls`:http://mywiki.wooledge.org/ParsingLs (3认同)

Gil*_*not 8

您可以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)