Sed
根據文件中的特定編號一次移動一個文件
根據這個問題,HTML 文件的日期格式已更改。所有 HTML 文件的日期如下所示:
20110730dateishere
dateishere
是我故意在文件中添加的,所以我可以很容易地查明那些日期位置。現在,在 HTML 文件的目錄中,我想根據該日期一次移動一個文件。
如果一次移動一個文件而不關心首先移動哪個文件,我可以簡單地使用
for file in $(ls | tail -1); do mv $file /other/location done
但是如何根據日期首先移動最舊的文件
XXXXXXXXdateishere
?(這意味著,HTML 文件包含20100110dateishere
先移動 before20100111dateishere
,然後是下一個文件;基於日期)(注:20100111 表示 2010 年 1 月 11 日)
這應該這樣做:
for i in $(grep dateishere *.html | sed 's/\(.*\):.* \([0-9]*dateishere\).*/\1 \2/' | sort -k 2 | awk '{print $1}') do mv $i blarg/ done
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
所以我猜每個文件只有一行,包含“dateishere”,並且該行以日期開頭,但是可以修改 sed 命令,即使在其他情況下也可以刪除日期。
如果文件名中有空格或換行符等,事情會變得有點複雜,所以如果可能的話,我想忽略這些。但根據你的說法,情況並非如此。