Bash
Gzip 文件,但不包括一些目錄|文件,還附加目前日期
我正在尋找一種
.tar.gz
從目錄創建文件的方法,但我有一些疑問。我知道創建文件的命令是:tar -zcvf /path/to/compressed/file.tar.gz /path/to/compress
然後我會得到一個
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 腳本而不是命令行
更新:在腳本內進行測試
根據**@Ariel 的**建議,我已將此行添加到 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
唯一剩下的問題是壓縮文件仍然具有整個路徑,而不僅僅是結束目錄。例如:
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/
,為什麼?
只需
cd
到您希望 tarball 樹結構開始的文件夾,並使用相對路徑!例如:# 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