30

復元する必要があるディレクトリがたくさんありますが、最初にそれらを .tar にパッケージ化する必要があります。100以上のディレクトリすべてを独自のtarにパッケージ化して、dirがdir.tarになるようにするスクリプトはありますか?

これまでの試み:

for i in *; do tar czf $i.tar $i; done
4

5 に答える 5

75

ディレクトリ名にスペースが含まれていると、作成したスクリプトは機能しません。名前が分割されるためです。また、このレベルにファイルが存在する場合は tar ファイルも処理されます。

このコマンドを使用して、再帰的ではないディレクトリを一覧表示できます。

find . -maxdepth 1 -mindepth 1 -type d

そして、これはそれぞれにtarを実行します:

find . -maxdepth 1 -mindepth 1 -type d -exec tar cvf {}.tar {}  \;
于 2013-04-10T23:55:16.407 に答える
6

そのレベルにスペースを含むディレクトリ名はありますか? そうでない場合、スクリプトは問題なく動作します。

私が通常行うことは、実行したいコマンドをエコーアウトしてスクリプトを作成することです。

$ for i in *
do
    echo tar czf $i.tar $i
done

次に、出力を見て、必要なことが行われているかどうかを確認できます。プログラムが動作することを確認したら、コマンド ラインを編集してコマンドを削除しechoます。

于 2013-04-11T00:48:03.510 に答える
4

ディレクトリ名にスペースが含まれている場合は、変数を二重引用符で囲みます。

for i in *
 do
     tar czf "$i.tar" "$i"
 done
于 2014-07-09T13:42:07.810 に答える