ファイルをGzipに圧縮しますが、一部のディレクトリ|ファイルを除いて現在の日付を追加します。

ファイルをGzipに圧縮しますが、一部のディレクトリ|ファイルを除いて現在の日付を追加します。

.tar.gzディレクトリからファイルを生成する方法を探していますが、いくつかの質問があります。ファイルを生成するコマンドは次のとおりです。

tar -zcvf /path/to/compressed/file.tar.gz /path/to/compress 

これで1つを取得できますが、file.tar.gzこれによりソースソースへのパスが維持されます。これが私が探しているものです:

  • に圧縮しなければならない.tar.gz
  • 可能であれば、圧縮されたディレクトリのパスは維持してはいけません。つまり、ディレクトリとその内容を圧縮するだけです。たとえば、Windowsでファイルを解凍すると、最新のファイルのみが/path[folder]/to[folder]/compress[folder+content]必要です。
  • 可能であれば、いくつかのディレクトリを省略できますか?はい、私はapp/内容が次のような圧縮フォルダが好きです。

    drwxrwxr-x  6 ubuntu ubuntu  4096 Feb 24 14:48 ./
    drwxr-xr-x 10 ubuntu ubuntu  4096 Feb 26 22:33 ../
    -rw-rw-r--  1 ubuntu ubuntu   141 Jan 29 06:07 AppCache.php
    -rw-rw-r--  1 ubuntu ubuntu  2040 Feb 24 14:48 AppKernel.php
    -rw-rw-r--  1 ubuntu ubuntu   267 Jan 29 06:07 autoload.php
    -rw-r--r--  1 root   root   94101 Feb 19 21:09 bootstrap.php.cache
    drwxrwxrwx  4 ubuntu ubuntu  4096 Feb 25 16:44 cache/
    -rw-rw-r--  1 ubuntu ubuntu  3958 Feb 24 14:48 check.php
    drwxrwxr-x  2 ubuntu ubuntu  4096 Feb 24 14:48 config/
    -rwxrwxr-x  1 ubuntu ubuntu   867 Jan 29 06:07 console*
    -rw-rw-r--  1 ubuntu ubuntu  6148 Jan 29 06:07 .DS_Store
    -rw-rw-r--  1 ubuntu ubuntu   143 Jan 29 06:07 .htaccess
    drwxrwxrwx  2 ubuntu ubuntu  4096 Feb 24 14:48 logs/
    -rw-rw-r--  1 ubuntu ubuntu  1118 Jan 29 06:07 phpunit.xml.dist
    drwxrwxr-x  5 ubuntu ubuntu  4096 Jan 29 06:07 Resources/
    -rw-rw-r--  1 ubuntu ubuntu 30404 Feb 24 14:48 SymfonyRequirements.php
    

    cache/しかし、ディレクトリlogs/とファイルを省略したいのですがbootstrap.php.cache、どうすればいいですか?それは可能ですか?

  • ファイル名に現在の日付(DD/MM/YYYY-H:M:S)を追加する必要があります。どうすればいいですか?

アドバイスや助けを得ることができますか?これをBashスクリプトに追加して、コマンドラインではなくbashスクリプトとして実行しようとしています。

アップデート:スクリプト内でテスト済み

次のような@アリエル私のbashスクリプトに次の行を追加するようにアドバイスを受けました。

read -e -p "Enter the directory to compress: " -i "/var/www/html/" directory
read -e -p "Enter the filename: " filename
FILENAME = "$filename-`date +%d-%m-%Y-%X`.tgz"

cd "$directory"
tar -zcvf /home/$FILENAME --exclude cache --exclude logs --exclude bootstrap.php.cache --exclude composer.lock --exclude vendor

ただし、次のエラーが発生します。

Enter the directory to compress: /var/www/html/lynxoft/apps/checkengine/
Enter the filename: checkengine
/usr/local/bin/script-task: line 109: FILENAME: command not found
tar: Cowardly refusing to create an empty archive

なぜFILENAMEvarではないコマンドと見なされますか?文書説明する?

アップデート2:まだフルパスを圧縮しています。

ユーザーのコメントのおかげで、いくつかの問題を解決しました。スクリプトの行は次のとおりです。

read -e -p "Enter the directory to compress: " -i "/var/www/html/" directory
read -e -p "Enter the filename: " filename
FILENAME="$filename"-$(date +%d-%m-%Y-%T).tgz

cd "$directory/.."
tar -zcvf /home/$FILENAME "$directory" --exclude="*cache*" --exclude=logs --exclude=bootstrap.php.cache --exclude=composer.lock --exclude=vendor --exclude=.git

残りの唯一の問題は、zipファイルに最終的なディレクトリだけでなく、フルパスがまだあることです。たとえば、

Enter the directory to compress: /var/www/html/lynxoft/apps/checkengine/
Enter the filename: file

これにより、file-28-02-2015-17:44:32.tgz圧縮ファイルの内容はまだフルパスを持ちます/var/www/html/lynxoft/apps/checkengine/。なぜですか?

ベストアンサー1

cdタールボールツリー構造を開始したいフォルダに移動し、相対パスを使用してください。たとえば、

# Note, one folder above
cd /path/to/compress/..
# Tell tar to compress the relative path    
tar -zcvf /path/to/compressed/file.tar.gz compress

解凍すると、 compress現在の作業ディレクトリにフォルダが作成されます。

このオプションを使用して、ファイルまたはフォルダを除いて--exclude <PATTERN>ファイル名に日付を追加できますdate +FORMAT。例:

FILENAME="file-`date +%d-%m-%Y-%T`.tgz"
tar -zcvf /path/to/compressed/$FILENAME --exclude cache --exclude logs --exclude bootstrap.php.cache compress

おすすめ記事