基于这个问题, HTML 文件的日期格式已更改。所有 HTML 文件都有如下日期:
20110730dateishere
dateishere
是我故意添加在文件中的,因此我可以轻松地查明这些日期位置。
现在,在 HTML 文件的目录中,我想根据该日期一次移动一个文件。
如果一次移动一个文件而不关心先移动哪个文件,我可以简单地使用
for file in $(ls | tail -1);
do
mv $file /other/location
done
但是如何根据 中的日期首先移动最旧的文件XXXXXXXXdateishere
? (这意味着,HTML 文件包含20100110dateishere
先移动到 之前20100111dateishere
,然后移动到下一个文件;基于日期)
(注:20100111指2010年1月11日)
答案1
这应该可以做到:
for i in $(grep dateishere *.html | sed 's/\(.*\):.* \([0-9]*dateishere\).*/\1 \2/' | sort -k 2 | awk '{print $1}')
do
mv $i blarg/
done
答案2
for dateNfile in $(grep dateishere *html | sed -r 's/^([^:]*):(.*)dateishere/\2:\1/' | sort -n)
do
name=${dateNfile/*:/}
# echo date=${dateNfile/:*/}
mv $name /other/location
done
所以我猜每个文件只有一行,包含“dateishre”,并且该行以日期开头,但可以修改 sed 命令,即使在其他情况下也可以剪切日期。
如果文件名中有空格或换行符等,事情会变得有点复杂,所以如果可能的话,我想忽略这些。但从你的说法来看,事实并非如此。