2017-09-30 5 views
0

現在、苦労しているのは、複数のファイルを作成して各ディレクトリに格納することです。私はこのような100個のディレクトリ作った :私が欲しいもの各ディレクトリに複数のファイルを作成し、tar(BASH)で圧縮する方法

mkdir ./dir.{01..100} 

は、ディレクトリごとに100個のテキストファイルを作成することです。名前のファイルを持っているホームディレクトリでdir.01上

クリック、::結果は以下のように表示されるように01.txtはまた

を100.txtし、私はすべての100個のディレクトリを圧縮したいですそれぞれに100個のテキストファイルが含まれています。私は苦労しています

  1. は100テキストを作成するには、一緒にすべての100個のディレクトリを圧縮するタールを用いて100のディレクトリ
  2. 内の各ファイルを。

100個のディレクトリに100個のテキストファイルを作成することに興味があります。また、私は、たとえば、100個のディレクトリをすべて特定のファイル(fdtar)で一緒に結合するtarの使用方法にもっと興味があります。

+0

はfor'ループ 'についてのbash上のドキュメントを読んでください。 [this one](https://stackoverflow.com/questions/169511/how-do-i-iterate-over-a-range-of-numbers-defined-by-variables-in-bash)のような例を確認してください。 – user3159253

+0

[Bashの変数で定義された数値の範囲をどのように反復処理するのですか?](https://stackoverflow.com/questions/169511/how-do-i-iterate-over-a-range-of-変数によって定義された数値) – user3159253

+0

これはすでに完了しています。私は数値の範囲を反復する方法を知っています。私はこのような方法でディレクトリを作成しました - > ./dir/ {01..100}実際に何かを返します – Mayjunejuly

答えて

0

私が理解すれば、2つのことが必要です。まず、100のディレクトリがあり、それぞれにファイルを作成する必要があります。

for n in dir.* 
do 
    f=`echo $n | sed s/dir\.//` 
    echo "This is file $n" >"$n/$f.txt" 
done 

tarについてtarは、複数のディレクトリを取得し、それらを一緒に接着するので、さらに簡単です:あなたが作成した他のすべてのディレクトリがあり、親ディレクトリから実行bashforループ付き。親ディレクトリから試してみてください:

tar cvf fd.tar dir.* 

cオプションでアーカイブが作成されます。 vは、tarに何が起きているのかを知るためにすべてのことを表示するように指示します。 f directories.tarはその名前のアーカイブを作成します。この場合

tar xvf fd.tar 

xタールアーカイブの内容を抽出し、元のディレクトリにあなたのためのすべての100個のディレクトリを作成します。

あなたはタール操作を取り消すときは、あなたが使用しますあなたはそれを呼び出す。私は.tar拡張としてfd.tarないfdtarを使用している

注ファイルがタールアーカイブであることを知らせるために通常の方法です。あなたは空のファイルと罰金している場合

+0

これは、ディレクトリの1つにスペースやいくつかのシェルメタキャラクタが含まれていると、複数の場所で破損します。常に、*常に*ファイル名を含む変数を二重引用符で囲みます。 https://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-shell-variable – tripleee

+0

提案が受け入れていただきありがとうございます。問題はそのようなケースでは述べられていませんでしたが。 –

0

touch ./dir.{01..100}/{01..100}.txt 

あなたが何かを含むように、各ファイルが必要な場合は、ループ内のドライバとしてその使用:

for file in ./dir.{01..100}/{01..100}.txt; do 
    printf "This is the file %s\n" "$file">"$file" 
done 

これは(ARG_MAXにぶつかる可能性があり"引数リストが長すぎる")がありますが、MacOSではうまく動作し、合理的に標準のLinuxでうまく動作するはずです。

内部にループを分割し、外側のループは、その問題を回避することができます:

for dir in ./dir.{01..100}; do 
    for file in {01..100}.txt; do 
     printf "This is file %s/%s\n" >"$dir/$file" 
    done 
done 
関連する問題