/User/test配下に以下ファイルとディレクトリがある前提で話を進めます。
1.txt
10.txt
2.txt
test(ディレクトリ)
aaa.csv
bb.exe
・実現したいこと
1..txtファイルのみを圧縮対象とし、test.tgzという圧縮ファイルを作成する。
2.test.tgzを解凍後、/test/.txtというtestディレクトリ配下に*.txtのみが格納される状態を作りたい
・実行コマンド
bash
1find /User/test -name "*.txt" -print0 | tar -czvf test.tgz --null -T - -C /Users/ test
・現在の状況
test.tgzを解凍すると、testディレクトリ配下に、*.txt以外のファイルやディレクトリが含まれている。
解決方法に関してご教示いただけますと幸いです。
おそらく、最後に -C /Users/ test って付けてしまっているので test ディレクトリ以下のファイルが全て archive されているのだと思います。
そうですよね。解決策ご存知ではないですか?
-C /Users/ test を削れば良いかと思います。
それだと、testディレクトリが作成されないので、だめですね。
展開する際に --strip-components を付けてみてはどうですか。
$ tar --strip-components 1 -xvf test.tgz
ダメでした。
archive を作成する際、
$ find /User/test -name "*.txt" -print0 | tar -czvf test.tgz --null -T -
としていますか?
しています。
そもそも、圧縮ファイルに不要なファイルを含ませたくないので、--strip-componentsは処方箋として望ましくないです。
そうなりますと、find 側で対処するのはどうでしょうか。
$ find /User/test -name "*.txt" -printf 'test/%P\0' | tar -C /User -czvf test.tgz --null -T -
ただ、そちらでお使いの find が GNU find の場合ですけれども。
無事解決できました。ベストアンサーにさせて頂きますので、回答に記載して頂ければと思います。
質問文に斜体文字が見えます。おそらく * を含んだ文字列を書いてますね。* が見えなくなってます。
ファイル名などの前後は ` (バッククォート)で囲みましょう。そうすると書いたまま表示されます。
あなたの回答
tips
プレビュー