是否可以使用 ls、tail 和 mv 移动最后修改的文件?

Rob*_*ith 4 linux ls find

我想使用 bash 命令从目录中移动最后 3 个修改过的文件。但是,我注意到我可以通过find以下方式使用:

find . -type f -mtime -0.5 -print -exec mv {} /home/user/Desktop \;
Run Code Online (Sandbox Code Playgroud)

但我还没有想出如何对ls -tr | tail -n 3. 例如,这不起作用:

ls -tr | tail -n 3 -exec mv {} /home/user/Desktop             
tail: invalid option -- 'e'
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用第二个选项的唯一原因是为了指定多个文件而不是大概时间。是否有可能使它lstail

谢谢!

nee*_*ted 5

您正在寻找的命令是xargs,因为tail它没有执行程序的本机能力。

完整的命令是:

ls -tr | tail -n 3 | xargs -I{} mv {} /home/user/Desktop
Run Code Online (Sandbox Code Playgroud)

分解它:

  • ls -tr列出按修改日期/时间 ( -t)排序的文件。默认情况下,最近的是第一个;如果您添加-r.
  • tail -n 3 将其过滤到最后三个条目。
  • xargs -I{} mv {} /home/user/Desktop运行mv {} /home/user/Desktoptail. 请注意,{}由 的输出替换tail

请注意,您可能需要对调用中的大括号进行转义xargs

xargs -I\{\} mv \{\} /home/user/Desktop
Run Code Online (Sandbox Code Playgroud)