1

学生からのプロジェクト提出物のディレクトリがあります。

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

各サブディレクトリには、1 つ以上の tar/zip/tgz/tar.gz/etc が含まれる場合があります。ファイル。学生がまったく提出していないため、一部のディレクトリが空である可能性があります。

プロジェクトの提出期限は、特定の設定時間です。提出期限前に作成された最新のファイルのみのコピーを取得し、それをファイル名
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 に答える