仅将目录中的最后 8 个文件移动到另一个目录

San*_*oss 7 command-line files directory tail mv

我试图将最后 8 个文件从Documents目录移动到另一个目录,但我不想将它们一个一个地移动到该特定目录。是否可以用tail命令的替代品移动它们,但移动目录而不是文件?我的意思是我想用类似tail -8 ./Documents | mv ./Anotherdirectory或用mv tail -8 ./Documents ./Anotherdirectory.

事实上,我正在寻找一种聪明的方法,我可以将最后 8 个文件(如 中所列ls)快速(无需输入每个名称)移动到另一个目录。有什么建议?

Zan*_*nna 7

您可以使用for, 以有序方式循环文件,并允许我们避免解析find或的输出ls,以避免文件名中的空格和其他特殊字符出现问题。非常感谢@muru 对此进行了改进:)

i=0; j=$(stat ~/Documents/* --printf "%i\n" | wc -l); for k in ~/Documents/*; do if (( (j - ++i) < 8 )); then echo mv -v "$k" ~/AnotherDirectory; fi; done 
Run Code Online (Sandbox Code Playgroud)

首先使用 进行测试echo,然后删除echo以实际移动文件。

作为脚本:

#!/bin/bash
i=0
j=$(stat ~/Documents/* --printf "%i\n" | wc -l )
for k in ~/Documents/*; do
  if (( (j - ++i) < 8 )); then
    echo mv -v -- "$k" ~/AnotherDirectory
  fi
done
Run Code Online (Sandbox Code Playgroud)

再次,echo测试后删除以真正移动文件

解释