2010-12-03 7 views
0

ちょっと、 特定のディレクトリのすべてのディレクトリをタールする必要があります。私は2つの問題を抱えています。私は欲しくない隠されたディレクトリを手に入れています。そして、それらがtarredされればどこかに配置する必要があります。ここでディレクトリタールスクリプトについての簡単な質問

は、私が今やっているものです:

for file in $(find /data/shares/builds/place1/ -maxdepth 1 -type d \(! -regex '.*' \));do tar zcf ../Place2_$1_$timeStamp/$file.tar.gz $file;done 

私はまだ隠しファイルを取得しています、と私は最初の場所が存在しないというエラーを取得しています。

../Place2_1.0.1_1012031412//data/shares/builds/Place1/Project1.tar.gz::開くことができません:そのようなファイルやディレクトリはありません

誰もが私ができる何も見え、私はメッセージを取得していますこの問題を解決するにはどうすればよいですか?

答えて

2

まず、findコマンドが適切でない(単独でテストしてみてください)。

このコマンドは、あなたがしたいディレクトリのリストを与える必要があります見つける:

find /data/shares/builds/place1/ -mindepth 1 -maxdepth 1 -type d ! -name '.*' 

(あなたが入っているディレクトリ自体をリスト避けるために、1を-mindepth必要があり、あなたがあなたの正規表現のに対し、意図したとおり-name作品!方法はありません)。

第2に、findの出力に各ディレクトリの完全なパス名が含まれていることに注意してください(例: "/ data/shares/builds/place1/Project1")文字列全体があなたの$ファイル変数に割り当てられ、あなたが作成しようとしている新しいtarファイルのターゲット "ファイル名"。これはおそらくあなたが実際に望むものではありません - 新しいタールボールを "../Place2_1.0.1_1012031412/Project1 .tar.gzの」パス名からディレクトリを取り除くためにbasenameを使用し、そう仮定すると、このような何か:。。最後に

for file in $(
    find /data/shares/builds/place1/ -mindepth 1 -maxdepth 1 -type d ! -name '.*' 
); do tar zcf ../Place2_$1_$timeStamp/$(basename $file).tar.gz $file;done 

、あなたのPlace2を作成しておく必要がありますのでご注意_ $ 1_ $ timestampディレクトリに移動します。

+0

非常に徹底的な対応に感謝します。私はUNIXには新しいので、すばらしい説明には非常に感謝しています。あなたの答えを受け入れることが遅れて申し訳ありません。 – PFranchise