2014-02-16 152 views
0

我一直在嘗試使用bash文件壓縮一組文件,在其文件名中包含空格。 bash的文件是:壓縮文件列表的文件名中包含空格

#!/bin/bash 
tar -cPf 'myconfigs.tar' `cat myconfigs.list` 

myconfigs.list文件的內容是:

/home/anas/.config/chromium/Default/Bookmarks 
/home/anas/.config/chromium/Default/Login Data 
/home/anas/.config/chromium/Default/Login Data-journal 

的問題是,文件包含在其文件名中的空格不被包括在結果TAR存檔。 我試過'','「,%20 ...但沒有工作。

感謝您的幫助提前。

+0

@galaxy,@anubhava:BTW,我試圖取代'/ home/anas /'帶'〜/'但我失敗了,請解決任何問題? –

回答

3

不要使用cat的輸出,否則空間被認爲是tar命令的分隔符和分隔符參數。

您可以使用-T tar option

tar -cPv -T myconfigs.list -f myconfigs.tar 
4

阿納斯,

我認爲你需要使用:

tar -cPf myconfigs.tar -T myconfigs.list 

,而不是你的 「貓」。貓也應該工作,如果你正確地逃避裏面的文件名,但-T更好。

修訂(解決問題的評論你的問題): 我不能在你的問題發表評論(沒有足夠的聲望),所以我決定來提高我的答案吧。

代字號(〜)擴展是一個shell事物,tar不支持它。然而,要達到你想達到的目標,你可以使用下面的技巧:在您的myconfigs.list文件

  • 使用相對路徑(相對於主目錄):
 
    .config/chromium/Default/Bookmarks 
    .config/chromium/Default/Login Data 
    .config/chromium/Default/Login Data-journal 
    以這樣的方式
  • 運行焦油,它改變目錄到你家在啓動時:
 
    tar -cPf myconfigs.tar -C ~/ -T myconfigs.list 

OK,我繼續創建了一個示例會話說明它:

[email protected]:~ # useradd -m galaxy 
[email protected]:~ # su - galaxy 
[email protected]:~ $ mkdir -p {1,2}/{3,4}/{5,6,7} 
[email protected]:~ $ find . -xdev -type d -exec touch '{}/file.txt' \; 
[email protected]:~ $ cat <<EOF> include.lst 
> 1/3 
> 1/4/5/file.txt 
> 1/4/7 
> 2/file.txt 
> EOF 
[email protected]:~ $ cd 2/3/6 
[email protected]:~/2/3/6 $ tar cjSpf ~/sample.tar.bz2 -C ~/ -T ~/include.lst 
[email protected]:~/2/3/6 $ cd 
[email protected]:~ $ tar tjvf sample.tar.bz2 
drwx------ galaxy/galaxy  0 2014-02-19 04:10 1/3/ 
-rw------- galaxy/galaxy  0 2014-02-19 04:10 1/3/file.txt 
drwx------ galaxy/galaxy  0 2014-02-19 04:10 1/3/7/ 
-rw------- galaxy/galaxy  0 2014-02-19 04:10 1/3/7/file.txt 
drwx------ galaxy/galaxy  0 2014-02-19 04:10 1/3/6/ 
-rw------- galaxy/galaxy  0 2014-02-19 04:10 1/3/6/file.txt 
drwx------ galaxy/galaxy  0 2014-02-19 04:10 1/3/5/ 
-rw------- galaxy/galaxy  0 2014-02-19 04:10 1/3/5/file.txt 
-rw------- galaxy/galaxy  0 2014-02-19 04:10 1/4/5/file.txt 
drwx------ galaxy/galaxy  0 2014-02-19 04:10 1/4/7/ 
-rw------- galaxy/galaxy  0 2014-02-19 04:10 1/4/7/file.txt 
-rw------- galaxy/galaxy  0 2014-02-19 04:10 2/file.txt 
[email protected]:~ $ 

應該給你一個開始:)

+0

這個竅門沒有奏效?:( –

+0

嗯,應該是的。你有沒有收到任何錯誤信息?檢查你的tar文檔中的-T和-C選項。有些tar允許你將-C加入到你正在使用的文件中-T。哦,以及你正在執行這個命令的用戶?如果它不是'anas',那麼你需要使用'〜anas /'而不是'〜/'。 – galaxy

+0

因此,我收到一個空的'myconfigs .tar'文件 關鍵是:我想備份_Current-user_的文件,而不管用戶的名字是什麼;簡單地說是當前用戶('〜/')。 btw,我使用tar v1.26。 –

相關問題