0

この種の形式の 150.000 個の zip ファイルを含むディレクトリをチェックインする必要があります。

log_from_2012_08_14-11:57:12_To_2012_08_14-13:57:12.zip
log_from_2012_08_14-13:57:12_To_2012_08_14-15:57:12.zip
log_from_2012_08_14-15:57:12_To_2012_08_14-17:57:12.zip

ファイルの日付と同じ名前のディレクトリがある場合:

2012_08_14 

次に、その From_2012_08_14 から存在するすべてのファイルをそのディレクトリに移動します。作成しない場合は、

( mkdir 日付 +%Y_%M_%D )

そして、8 月から今日の 11 月までの毎日をチェックし、その日からのすべてのファイルは、独自のディレクトリを作成してそこに移動します。

4

2 に答える 2

1
cd /relevant/log/directory

# Create the necessary sub-directories
ls *from_????_??_??-??:??:??_To_????_??_??-??:??:??.zip |
sed 's/.*from_\([0-9]\{4\}_[0-9][0-9]_[0-9][0-9]\).*/\1/' |
sort -u |
xargs mkdir -p

# Move the files into the sub-directories
ls *from_????_??_??-??:??:??_To_????_??_??-??:??:??.zip |
sed 's/.*from_\([0-9]\{4\}_[0-9][0-9]_[0-9][0-9]\).*/mv & \1;/' |
sh -x

-xオプションですが、発生中に何が起こっているかを示します。ファイル名にスペースや改行が含まれていないと思います。?また、シェル内のパターンが数字と一致すると予想される英数字を含むファイルはないと仮定しています。完全に偏執的である必要がある場合は、それぞれ?を拡張するか、スクリプトを修正して、一致しない名前を破棄することができます。[0-9]sed

于 2012-11-05T02:21:30.537 に答える
0

迅速で汚い Bash ソリューション

for file in log_from*.zip; do
    dirname=${file#log_from_}
    dirname=${dirname%%-*}
    [ ! -d "$dirname" ] && mkdir "$dirname"
    mv "$file" "$dirname"
done 
于 2012-11-05T05:58:23.140 に答える