質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

解決済

1回答

223閲覧

バックアップシェルで、ディレクトリごと圧縮しつつ、シンボリックリンクは除外したい

mirukikki

総合スコア9

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

1グッド

0クリップ

投稿2024/04/09 23:39

実現したいこと

バックアップシェルで、ディレクトリごと圧縮しつつ、シンボリックリンクは除外したい

前提

ここに質問の内容を詳しく書いてください。
(例)
現在バックアップするシェルを作成していますが、うまくいきません。。

発生している問題・エラーメッセージ

フォルダごとtarで固めるとシンボリックリンクも含まれてしまいました。
nice -19 tar zcvpf test.tar.gz

現状は以下のコードで、シンボリックリンクを除いたリストを作成して、それに基づいてtarコマンドで圧縮しています。
find {リストにするディレクトリ} -mindepth 1 -type f > list.txt
nice -19 tar zcvpf {圧縮先パス} --files-form=list.txt
-type f でシンボリックリンクを除外して、-mindepth 1はサブフォルダがある場合に親ディレクトリとサブディレクトリで
重複して圧縮しないために使用しています。
この状態だと、シンボリックリンクを含まないで圧縮ができるのですが、唯一からのフォルダがあった場合無視されてしまいます。
type oも追加で使用することでフォルダが空の場合でも圧縮できたのですが、その場合以下のディレクトリをリストにした際、
フォルダが被ってしまいます。
src/hoge/hoge2 ↓

src
hoge/hoge2
hoge2/
このように親ディレクトリ含めてしまうので重複してしまいます。
-mindepthも使用してあれこれ試してみたのですが、理想的な状態にはできませんでした。

最終的には、シンボリックリンクを除いた、すべての構造をそのままバックアップしたいです。

つたない質問で申し訳ないのですが、ご教授いただければ幸いです。

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

melian👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2024/04/10 01:23

symbolic link file の除外は -not -type l としてみてはどうでしょうか。また、GNU tar コマンドの --no-recursion はコマンドラインの最後に指定するとエラーになります。("tar: --no-recursion has no effect" と表示されます) find {リストにするディレクトリ} -not -type l -print0 | tar --no-recursion --null --files-from - -zcvpf {圧縮先パス}
mirukikki

2024/04/10 01:42

私の場合最後に--no-recursionをつけても問題なかったようです。 この度は回答いただき誠にありがとうございます!
mirukikki

2024/04/10 02:52

再度確認したらtarのバージョンが新しいほうでエラーになってしまいました。 真ん中につけて試しています。ありがとうございます:))
guest

回答1

0

ベストアンサー

find で、ファイルとディレクトリを両方(-type f -o -type d)リストアップしておいて、tar に --no-recursion オプションをつけて再帰的なアーカイブをしないようにすればできると思います。

find {リストにするディレクトリ} -type f -o -type d > list.txt tar zcvpf {圧縮先パス} --no-recursion --files-from=list.txt

投稿2024/04/10 00:37

編集2024/04/10 02:16
bsdfan

総合スコア4601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mirukikki

2024/04/10 01:43

うまくいきました。 再帰的なアーカイブを防ぐコマンドがあるんですね。 大変勉強になります。この度は誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問