.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
なぜFILENAME
varではないコマンドと見なされますか?文書説明する?
アップデート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
答え2
これにより、以下をgnu tar
使用できます。
--transform=EXPRESSION, --xform=EXPRESSION
Use sed replace EXPRESSION to transform file names.
これは--xform='s|path/to/||'
パスから削除されることを意味します。path/to/
--exclude=PATTERN
Exclude files matching PATTERN, a glob(3)-style wildcard pattern.
したがって、以下を実行できます。
tar -zcvf /path/to/compressed/"$(date +%d-%m-%Y-%T)"-testdir.tar.gz \
--transform='s|^path/to/||' /path/to/compress \
--exclude='cache' --exclude='logs' --exclude='bootstrap.php.cache'
/
で使用される式には先行がありませんxform
。より一般的なアプローチ:
--xform='s|^([^/]*/){2}||x'
これにより、パスの最初の2つの要素が削除されます(必要に応じて2を別の数字に置き換えます)。