4

何千ものファイルを含むディレクトリがあります。それらには特定の作成日があります。これらのファイルを特定の時間に特定のディレクトリにアーカイブしたいと考えています。

例:

作成されたファイル:

May 15 testmay.txt
Jun 10 testjun.txt
Jul 01 testjul.txt

それらはそれらのディレクトリに来るはずです

/2013-05/testmay.txt
/2013-06/testjun.txt
/2013-06/testjul.txt

リモートサーバーから一時的な月のディレクトリにファイルをrsyncするために、すでにこれを持っています。

#!/bin/sh

GAMESERVER=game01
IP=172.1.1.1

JAAR=`date --date='' +%Y`
MAAND=`date --date='' +%m`
DAG=`date --date=''  +%d`
LOGDIR=/opt/archief/$GAMESERVER

if [ ! -e $LOGDIR/$JAAR-$MAAND ]; then
        mkdir $LOGDIR/$JAAR-$MAAND/tmp
        chmod -R 770 $LOGDIR/$JAAR-$MAAND/tmp
fi

rsync -prlt --remove-source-files -e ssh root@$IP:/opt/logs/sessions/ $LOGDIR/$JAAR-$MAAND/tmp

chmod -R 770 $LOGDIR/ -R

このスクリプトを完了するにはどうすればよいですか?

4

3 に答える 3

1

あなたが置く場合

for file
do  dir=/`date +%Y-%m -r$file`
    mkdir -p $dir && mv $file $dir
done

という名前のスクリプトファイルに、archiveたとえば実行できます

archive *

すべてのファイルを目的のディレクトリに移動します。これにより行が長すぎるというエラーが発生する場合は、実行します

/bin/ls | xargs archive

代わりは。(慎重になりたい場合は、mv -iオプションを使用できます。)

于 2013-10-17T08:15:26.633 に答える
1

このようなもの?

DEBUG=echo
cd ${directory_with_files}
for file in * ; do 
    dest=$(stat -c %y "$file" | head -c 7) 
    mkdir -p $dest
    ${DEBUG} mv -v "$file" $dest/$(echo "$file" | sed -e 's/.* \(.*\)/\1/')
done

免責事項: ファイルの安全なコピーでこれをテストしてください。私はデータの損失に対して責任を負いません;-)

于 2013-07-16T13:30:34.913 に答える