根据文件中的特定编号一次移动一个文件

根据文件中的特定编号一次移动一个文件

基于这个问题, 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 命令,即使在其他情况下也可以剪切日期。

如果文件名中有空格或换行符等,事情会变得有点复杂,所以如果可能的话,我想忽略这些。但从你的说法来看,事实并非如此。

相关内容