質問: ### 前提・実現したいこと CentOS8でshファイルとcronを使った自動バックアップを作りたいが、 完成したファイル内が大量のフォルダ状態になってしまうので、 バックアップ対象フォルダのみにする方法が知りたい。 また、実行時にエラーが出るので、解決したい。 ### 発生している問題 このqiitaの投稿のようにshファイルを作成した。 https://qiita.com/abgata20000/items/290612617469eaeeb68d すると、バックアップはできるのだが、 tarファイル内がフルパスフォルダのパス構成のままになる。 ### 希望の構成 /home/user/folder というパスのnewフォルダにあるファイルのみを、 backup_yymmddhhmmss.tar.gzという名前でバックアップしたい。 *圧縮フォルダ内はnewフォルダのみにしたい。 今の状況: backup_yymmddhhmmss.tar.gzという名前で圧縮フォルダは作れている。 ただし圧縮フォルダ内が、/home/user/folder/new というフォルダ構成になっている。 ### エラーメッセージ エラーではないと思うのだが、実行時にこの表示が出る。 tar -zcvf $dirpath/$filename -C / $backupfolder tar -zcvf $dirpath/$filename $backupfolder ※バックアップコマンドをどちらにしても出る。 ``` tar: メンバ名から先頭の `/' を取り除きます ``` ### 該当のソースコード ``` #!/bin/bash # バックアップファイルを何日分残しておくか period='+24' # バックアップファイルを保存するディレクトリ dirpath='/home/user/backup' #バックアップ元フォルダ backupfolder="/home/user/folder/new" # ファイル名を定義(名前と年月日時分をファイル名にする) mydate=`date +%y%m%d%H%M%S` filename=$target"datebkup_$mydate.tar.gz" #backup実行 tar -zcvf $dirpath/$filename $backupfolder # パーミッション変更 chmod 700 $dirpath/$filename # 古いバックアップファイルを削除 find $dirpath -type f -daystart -mtime $period -exec rm {} \; ``` ### 試したこと バックアップ実行のコマンドを変えてみたが、どちらも同じ結果だった。 tar -zcvf $dirpath/$filename -C / $backupfolder tar -zcvf $dirpath/$filename $backupfolder 回答いただいた tar -zcvf $dirpath/$filename new -C $backupfolder では、エラーが表示される。 ``` tar: The following options were used after any non-optional arguments in archive create or update mode. These options are positional and affect only arguments that follow them. Please, rearrange them properly. tar: -C `/home/user/folder/new' has no effect ``` ### 補足情報 補足などあればここに記載します。
回答: `-C` のディレクトリ変更オプションは、コマンドの先頭に付ける場合は ``` $ tar -C パス -zcvf 作成するアーカイブ名 バックアップするもの ``` です。 今回のご質問では `new` をパス無しでアーカイブされたいのであれば、直接コマンドを実行する場合は、このようなコマンドになります。 ``` $ tar -C /home/user/folder/ -zcvf /home/user/backup/hoo.tar.gz new ``` シェルスクリプトでは `$backupfolder` として `new` も含めていますが、こちらのコマンドのように書き換えれば動作します。ただし、 `new` ディレクトリが作成されていませんとエラーになりますので、ディレクトリが無い可能性があれば、さらに1つの上のディレクトリを `-C` で指定します。