2017-02-19 66 views
0

我看了很多文章,我似乎無法弄清楚,我想我是一個noob。修剪目錄和當前目錄的文件以供tar使用

反正我有一個目錄我想tar,但是我想排除shallow目錄的文件,以及排除文件夾 「插件」,「備份」和「日誌」位於淺層目錄。

- >

\#!/bin/bash 
mkdir -p /path/to/backup/directory/`date +%d%m%y` 
cd /path/to/backup/directory/`date +%d%m%y` 
cd .. | find . -not \\(-path plugins -prune -o -path backups -prune -o -path logs -prune \\) -mindepth 1 -print0 | xargs -0 tar cpj --directory=$(cd -) -f `date +%H`.tar.gz 

這一發現部分是什麼是錯的,但不排除任何事情。這是我的第30次(不是字面上的,但實際上可能高於實際的xD)試圖修剪,什麼不修剪,每次嘗試看起來都比上一次更荒謬。

如果有人可以只顯示我要查找部分的解決方案,那簡直太好了 - 謝謝

(的「`」字符是日期周圍,它只是打破了代碼視圖,當我試圖把他們在那裏)

+0

爲什麼不直接使用tar的--exclude = PATTERN選項? – mfnalex

+0

'cd'對'find'沒有產生任何有意義的輸出,無論如何,這個改變對流水線的這個組件開始的進程是本地的。 – chepner

+0

我同意'mfnalex','tar'有靈活的方法來包含/排除文件,你應該嘗試'man tar'。您可以使用文件列出包含/排除規範,並且可以使用流程替換('<(command_or_function)')按需構建文件以避免使用常規文件。 – Fred

回答

0

使用--exclude = PATTERN和*/,因爲它只會趕上目錄:

tar --exclude=plugins/ --exclude=logs/ --exclude=backups/ -cf /path/to/backup/directory/`date +%d%m%y`/whatever.tar [other options] */ 
+0

謝謝,我已經試過,我已經得到它排除文件夾,但idk如何排除僅在淺層目錄中的文件 – annon

+0

當你在目錄中時,你可以顯示ls的輸出,並告訴哪些文件應該被排除嗎? – mfnalex

+0

https://gyazo.com/7aafd163d105d6cf68b864a43fef513d我試圖只備份文件夾,不包括插件和日誌,所以在這種情況下的結果應該是msffamap + temp + world + world_nether + world_the_end – annon

0

關於發現除目錄,嘗試

find . -type d \(-path plugins -o -path backups -o -path logs \) -prune -o -print 
+0

我只是試過,不幸的是沒有被排除:(謝謝,雖然 – annon