根据文件名称重命名前 10 个最新文件

根据文件名称重命名前 10 个最新文件

我在定义的目录中有一些 .xls 文件(例如在 /A/B 中)。我想重命名前 10 个最新文件并在其名称中附加“-bkp”。

我试过了,没有用

ls -lt *.xls | head -1 | awk '{print "mv " $9 " "$9-bkp}' | sh

我尝试了 find 和 -exec 但我们如何获取前 10 个最新修改的文​​件

答案1

脚本失败的原因是$9-bkp被视为表达式:-bkp也应该被引用,所以该行应该是:

ls -lt *.xls | head -10 | awk '{print "mv " $9 " "$9"-bkp"}' | sh

但是,这不必要地复杂:您需要列出许多文件属性,然后使用awk来提取名称。此外,您不需要启动子 shell 来执行生成的命令。此外,如果文件名中有空格,上述命令将不起作用。

下面针对所有这些要点进行了讨论:

ls -t *.xls | head -10 | while read; do mv "$REPLY" "$REPLY-bkp"; done

在这种情况下,ls -t仅列出文件名,每行一个;read将每一整行复制到中REPLY,包括所有空格(无论是嵌入的、前导的还是尾随的);并且mv对每一行运行该命令。

请注意,更常见的read name是将一行复制到中name,但没有前导和尾随空格。

相关内容