デルタ名を持つ2000以上のフォルダのループを作成し、同じデルタ名のアーカイブに圧縮します。

デルタ名を持つ2000以上のフォルダのループを作成し、同じデルタ名のアーカイブに圧縮します。

私はbashとSEの初心者であり、助けが必要です。 Debianサーバーには2000を超えるフォルダ(名前は1000ずつ増加)があり、これらのフォルダをソースのフォルダ1に対応する増分名を持つ別々のストレージ専用アーカイブに圧縮する必要があります。階層をアップグレードします。その後、各アーカイブを作成したら、ソースファイルフォルダを削除する必要があります。

したがって、以下のコードは私が必要とすることを行いますが、現在私の考えは同じ行を2000回以上繰り返すことです。ループを使用してこのプロセスを数行に自動化するより良い方法があるかどうか疑問に思います。サブフォルダ変数を推測しますか?

助けてください。とても感謝しています!

#!/bin/bash

cd private/completed/0/ && zip -r -0 ../0.zip ./* && rm -R 0/ && cd -
cd private/completed/1000/ && zip -r -0 ../1000.zip ./* && rm -R ../1000 && cd -
cd private/completed/2000/ && zip -r -0 ../2000.zip ./* && rm -R ../2000 && cd -
cd private/completed/3000/ && zip -r -0 ../3000.zip ./* && rm -R ../3000 && cd -
cd private/completed/4000/ && zip -r -0 ../4000.zip ./* && rm -R ../4000 && cd -
....

cd private/completed/2800000/ && zip -r -0 ../2800000.zip ./* && rm -R ../2800000 && cd -

修正する:Kusalanandaさん、役に立つリンクを提供していただきありがとうございます(複数のディレクトリを別々のzipファイルに圧縮するコマンド)。関連する回答のコードを使用し、必要な方法で正しく機能するように少し修正しました。次の結果コードを追加しました。

#!/bin/bash
cd private/completed/
for i in {0..2800000..1000}; do echo "$i" ; cd "$i" ; zip -q -r -0 ../"${i%/}.zip" . && cd .. && rm -R "$i" ; done

ベストアンサー1

たとえば、次のように for ループを使用できます。

for  i in `seq 1000 1000 2000000`;do echo $i; done;

cpコマンドを使用して、$ iをディレクトリ名とフォルダ名として使用できます。

おすすめ記事