我在定义的目录中有一些 .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
,但没有前导和尾随空格。