Sed

根據文件中的特定編號一次移動一個文件

  • July 30, 2011

根據這個問題,HTML 文件的日期格式已更改。所有 HTML 文件的日期如下所示:

20110730dateishere

dateishere是我故意在文件中添加的,所以我可以很容易地查明那些日期位置。

現在,在 HTML 文件的目錄中,我想根據該日期一次移動一個文件。

如果一次移動一個文件而不關心首先移動哪個文件,我可以簡單地使用

for file in $(ls | tail -1);
do
mv $file /other/location
done

但是如何根據日期首先移動最舊的文件XXXXXXXXdateishere?(這意味著,HTML 文件包含20100110dateishere先移動 before 20100111dateishere,然後是下一個文件;基於日期)

(注: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 命令,即使在其他情況下也可以刪除日期。

如果文件名中有空格或換行符等,事情會變得有點複雜,所以如果可能的話,我想忽略這些。但根據你的說法,情況並非如此。

引用自:https://unix.stackexchange.com/questions/17683