1

我有一个学生提交的项目目录:

+ submissions
|
+-+ Student_Name_1
|
+-+ Student_Name_2
|
+-+ Student_Name_3
|
...

每个子目录可能包含一个或多个 tar/zip/tgz/tar.gz/etc。文件。有些目录可能是空的,因为学生根本没有提交。

项目提交截止日期是在特定的设定时间。什么是最有效的方法(最好是在 BASH 脚本中,以保持简单)仅获取在提交截止日期之前创建的最新文件的副本并将其复制到另一个目录,文件名是:
Student_Name_#--original_file_name.tar/zip

4

2 回答 2

2

也许:如果我已经理解找到最接近截止日期的提交的要求。

set -e
touchfile=touchfile
deadline=02010930 #CHANGEME
touch -t $deadline $touchfile
files=`find submissions  -type f  | while read filename ; do
    if [[ $filename -ot $touchfile ]] ; then
        echo $filename
    fi
done`

[[ -n "$files" ]] && {
    thefile=`ls -t $files | head -1`

    [[ -n "$thefile"  ]] && {
        # REMOVE echo when happy :D
        echo cp $thefile $(basename $(dirname $thefile))-$(basename $thefile)
    }
}
于 2013-02-06T00:11:12.230 回答
1

这样的事情应该这样做:

DESTINATION="../final"
for D in `find . -type d`
do
    LASTFILE=`cd ${D};ls -art1 *.{zip,tar} | tail -1`
    #note that the last arg of each call is the number one, not the letter 'L'
    cp ${D}/${LASTFILE} ${DESTINATION}/${D}-${LASTFILE}
done
于 2013-02-05T21:55:46.547 回答