• 締切済み

tarでディレクトリのみをアーカイブしたい

noname#9381の回答

noname#9381
noname#9381
回答No.1

最近あまりUNIXのコマンドラインを扱っていないのでtarの仕様も良く覚えていないのですが...  tarが個別のファイルを固められるとして、こんな感じ(雰囲気)でできないでしょうか? tar cvfx `ls -F <directory> | grep -v "*\/"`  分かるかた、フォローをお願いします。 # ls -Fの結果がどう評価されるかが心配です。  今の方法でできるのでしたら、それをシェルスクリプトにしてしまえばいいような気がします。

gaktank
質問者

お礼

ご回答ありがとうございます。 tar cvf XXXXX の XXXXX の部分でディレクトリを指定した場合に、ディレクトリの中身のファイルも一緒にアーカイブされてしまう、という仕様に対して、ディレクトリのみをアーカイブできないか、というのが今回模索している点です。 ですので、`ls -F <directory> | grep -v "*\/"` の結果がディレクトリであれ、ファイルであれ、結果としてはファイルもアーカイブされてしまいます。 やはりtarの仕様上、無理なのでしょうね。 なお、cとxのオプションは一緒に扱えません。

関連するQ&A

  • UNIXのtarコマンドについて

    tarコマンドで以下の様に指定して、カレントディレクトリ配下のファイルのみをアーカイブしたいのですが、カレントディレクトリ自身の情報もアーカイブされてしまいます。ファイルのみをアーカイブすることは出来ないでしょうか?よろしくお願い致します。 tar cvf (tarファイル名) -C (ディレクトリ名) .

  • tar(*.tgz)ファイルの解凍の際に「ディレクトリは状態を展開でき

    tar(*.tgz)ファイルの解凍の際に「ディレクトリは状態を展開できるようになる前に名前を変更されました」というエラーが出ます。 Linuxマシンでのバックアップをtarファイルにしました(20GB)。そして、そのtarファイルを、Win7マシンに接続しているUSBハードディスク(NTFS)にコピーして展開しました。ただし、展開の際には、win7上にVMwareをインストールして、仮想マシンとしてubuntsuを走らせ、ファイルの共有でUSBハードディスクを読み書きしています。その際、以下のようなエラーが出て終了しました。 ------------------------- tar: AAA/BBB/dir1/dir2: ディレクトリは状態を展開できるようになる前に名前を変更されました tar: AAA/BBB/dir1: ディレクトリは状態を展開できるようになる前に名前を変更されました tar: AAA/BBB/dir3: ディレクトリは状態を展開できるようになる前に名前を変更されました tar: AAA/BBB: ディレクトリは状態を展開できるようになる前に名前を変更されました tar: 前のエラーにより失敗ステータスで終了します -------------------------- 調べたところ、 AAA/BBB/dir1/dir2とAAA/BBB/dir3の中には、Linuxマシン上での他の場所に向けてシンボリックリンクファイルがあることがわかりました。 tarは、シンボリックリンクは無視すると思っていたのですが、このようなエラーがシンボリックリンクが原因で出ることがありえますか?それとも、他の原因でしょうか?

  • tarコマンドで

    ログインしたユーザーのホームディレクトリがカレントディレクトリで、 tar -cvf /dev/hda . というコマンドを実行した場合は、ユーザのホームディレクトリのすべてのファイルを新しくアーカイブしてhdaに書き出すという意味で良いのでしょうか?

  • ディレクトリをコピーするツールを作ってますけど、うまくいきません。

    ディレクトリをコピーするツールを作ってますけど、うまくいきません。 何方か教えてください! 内容:1、「~/???.tmp」というディレクトリを検索し指定ディレクトリにコピーする。    2、「~/???」というディレクトリも合わせて指定ディレクトリにコピーする。    3、 指定ディレクトリから2階層下にある「aaa」ディレクトリ直下を対象とする。    4、 コピーしたディレクトリを表示する。 使い方:./cptmpDir.sh path1 path2  [-c] 引数: path1 は対象ディレクトリ     path2 はコピー先ディレクトリ -c 指定されていればディレクトリのコピーを行う。 例え以下のようなディレクトリがあるとする。 home/ccc/bbb/aaa/abc.tmp home/ccc/bbb/aaa/abc home/ccc/bbb/aaa/cba home/ccc/bbb/aaa/ddd/efg.tmp home/ccc/bbb/aaa/ddd.tmp ./cptmpDir.sh  /home  /var/tmp [-c] を実行したら home/ccc/bbb/aaa/abc.tmp home/ccc/bbb/aaa/abc home/ccc/bbb/aaa/ddd.tmp が/var/tmpにコピーされるのが正常の働き。 私が書いたシェルは 内容1、3、4、はできたけれども 2、ができてません。 だからhome/ccc/bbb/aaa/abcがコピー対象がになっています。 以下は私が書いたシェルである。 #!/bin/ksh if [[ $# -lt 2]] then echo "usage: $0 path [-c]" exit 1 fi path2=$2 copydir=0 if [[ $3 = "-c" ]] then copydir=1 fi find $1 -maxdepth 3 -mindepth 3 -type d -name "aaa" | ¥ while read d do find $d -maxdepth 1 -mindepth 1 -type d -name "*.tmp" | ¥ while read a do if [[ $copydir -eq 1 ]] then cp -r $a $path2 echo "cp" "${a#*/}" else echo "${a#*/}" fi done done よろしくお願い致します!。 home/ccc/bbb/aaa/abcもコピーされるように!!!

  • tarコマンドを用いてバックアップ

    非常に困っています。 tarコマンドを用いてテープにバックアップを取ろうと思っています。しかし、tarコマンドには2GB以上のアーカイブを作れないという仕様上の制約があります。 仮に以下のようなコマンド操作を行ったとします。 tar cvf /dev/rmt/0m FILE1 FILE2 FILE3; FILEA FILEB FILECはいずれも1GBとし、計3GBのバックアップを取るものとする。 この場合バックアップできるのでしょうか? また、どこかのサイトにこの事が載っているのでしょうか? 片方だけでも分かる方よろしくお願いします。

  • 特定の「文字列を含まない」正規表現

    tarコマンドでファイルのアーカイブを作成しようとしています。 特定のディレクトリは対象外としたいのですが、正規表現の記述がわかりません。 ご教授いただきたくお願いいたします。 具体的には、、 --- ディレクトリ「abc」配下にあるファイルをアーカイブする場合、 tar cvf /tmp/xxxx.tar abc などと記述しますが、abc配下にある「statistics」といディレクトリはアーカイブ対象外とし、statistics以外をアーカイブしたいのですが、方法がわかりません。 シェルは bashです。 どなたかご存じの方、よろしくお願いいたします。

  • Linuxのtarコマンドについて

    Linuxのtarコマンドについてわかる方がいれば教えてほしいです。 (tarコマンドというよりはLinuxの仕様かもしれません) Linuxで以下①パターンと②パターンでコマンドを実行したときに 指定の仕方でtarファイルの作成されるディレクトリが違うのですが なぜでしょうか。 Linux初心者なので詳しく教えていただけると助かります。 共通(前準備 (#はプロンプトです)) # DIR=/tmp/hoge/2021 # ls -l ${DIR} ~ test1.txt ~ test2.txt ~ test3.txt # cd ${DIR} ①パターン # tar -cvf ${DIR}.tar ./* (アスタリスクです) # ls -l /tmp/hoge ~ 2021.tar ⇒/tmp/hoge配下にtarができる ②パターン # tar -cvf 2021.tar ./* (アスタリスクです) # ls -l /tmp/hoge ~ 2021.tar ⇒/tmp/hoge/2021配下にtarができる

  • tarと compressと  remshの組み合わせ

    HP-UXを使用しています。 tar と compress とremshを組み合わせて、 あるディレクトリ配下のファイルを、バックアップし、圧縮し、さらに別サーバに転送したいのです。 例えば、あるディレクトリを /etc/tmpとし、別サーバのIPアドレスをxxx.xxx.xxx.xxxとし、 別サーバの保存領域が/tmpとし、圧縮したバックアップファイル名をdummy.tar.Zとします。 このとき、 下のように打っても、tarのエラーがでます。 具体的には etc/tmp配下にファイルがたくさんあるのにもかかわらずファイルが見つかりませんのようなエラーがでました。 (...のようなというのは、今、家にいるため会社で昼間見たエラーメッセージを覚えていないのです) うってみた内容    tar cvf -etc/tmp | compress -c | remsh xxx.xxx.xxx.xxx dd of=/tmp/dummy.tar.Z  構文が違うのかと思い、いろいろ順序を入れ替え、やってみましたが駄目でした。 しかし、tarとcompressとremshを組み合わせ、対象ファイルをバックアップし、圧縮し、さらに別サーバに転送できると聞いたことがあるのです。(メリットは最初のサーバに大きな容量のバックアップファイルを残さないですむこと)  今日、三時間ほど試しましたが、できませんでした。  もし、皆さんの中でやられた方がいらっしゃいましたら教えてください。

  • tarコマンドのリターン値

    RedHatlinux AS3.0でperl内部でsystemコールでtarコマンドを 発行していますが $result = system "tar czvf・・・ 1> /dev/null 2> /dev/null" の結果として$resultの値に512という値が入ることがあります。 実際、tarファイルの作成には成功しているので0が返ってきて それ以外をエラーとして判定するように期待していたのですが 上記の通りの値になってtar成功に関わらずエラーと判断して しまいます。 この512というリターン値は何なのでしょうか? なお、単純にsystemで簡単なtarをすると0で普通に返ってきたりします。またtar元はディレクトリ配下の複数のファイルを*で圧縮しようとしています。

  • ディレクトリ一覧作成の高速化

    UNIXで / 配下のディレクトリ一覧をファイル出力することになりました。 今は # find / -type d > /tmp/hoge.txt としてますが、/ 配下のファイル数(ディレクトリも含む)が30万以上もあるため、 一覧を出力するだけで非常に時間がかかります。 ディスクは1マシン辺り30本程ついています。 (この規模のマシンが50台くらい) 後の方法は、ls でドバーっと出力して後からディレクトリだけを抽出する、という 感じくらいかなと思うのですが、もっと早く出力する方法があれば教えてください。 よろしくお願いします。