[英]how to rename files you put into a tar archive using linux 'tar'
我正在嘗試用幾個文件創建一個 tar 存檔,但在存檔中重命名這些文件。 現在我有這樣的事情:
tar -czvf file1 /some/path/to/file2 file3 etc
但我想做類似的事情:
tar -czvf file1=file1 /some/path/to/file2=file2 file3=path/to/renamedFile3 etc=etc
當提取到目錄 testDir 時,您將在其中看到以下文件:
我怎樣才能做到這一點?
您可以使用--transform
修改文件名(以及其他內容)。 例如,要創建磁帶存檔/tmp/foo.tar
,將文件/etc/profile
和/etc/bash.bashrc
放入其中,同時將profile
重命名為foo
,您可以執行以下操作:
tar --transform='flags=r;s|bar|foo|' -cf file.tar file1 file2 bar fubar /dir/*
上面的結果是bar
被添加到file.tar
作為foo
。
r
標志表示轉換僅應用於常規文件。 有關更多信息,請參閱GNU tar文檔 。
您可以多次使用--transform
,例如:
tar --transform='flags=r;s|foo|bar|' --transform='flags=r;s|baz|woz|' -cf file.tar /some/dir/where/foo/is /some/dir/where/baz/is /other/stuff/* /dir/too
使用--transform
,不需要先創建臨時testDir。 要將testDir/
前置到存檔中的所有內容,請匹配起始錨點^:
tar --transform "s|file3|path/to/renamedFile3|" \
--transform "flags=r;s|^|testDir/|" \
-czvf my_archive.tgz file1 /some/path/to/file2 file3 etc
r
標志對於保持轉換不會破壞歸檔中的任何符號鏈接目標(也與^匹配)至關重要。
我們可以參考man tar
, -O
選項是最好的選擇,因為文件可以寫成標准輸出。
-O (x, t modes only) In extract (-x) mode, files will be written to
standard out rather than being extracted to disk. In list (-t)
mode, the file listing will be written to stderr rather than the
usual stdout.
以下是示例:
# 1. without -O
tar xzf 20170511162930.db.tar.gz
# result: 20170511162930.db
# 2. with -O
tar xzf 20170511162930.db.tar.gz -O > latest.db
# result: latest.db
在不喜歡我找到的任何解決方案后,我剛剛編寫了tarlogs.py ,它允許您為tar條目指定任意名稱。 每個tar條目由一個(或幾個)常規(或gzip)輸入構成。 您還可以添加目錄,這些目錄將與常規tar
一樣被遞歸。 所以在你的情況下,
tarlogs.py -o file1 -i /some/path/to/file2 -o file2 -i file3 -o path/to/renamedFile3 -o /etc >output.tar
( -o
沒有-i
輸入只使用輸出路徑作為輸入,沒有重命名)
這個問題已經有一段時間了,但對於正在尋找另一個合適解決方案的人來說:
我創建了一個原始 GNU tar 實用程序的分支,它額外支持文件名映射。
使用示例:
> touch myfile.txt
> tar cf file.tar ':myfile.txt:dir/inside/tar/newname.txt'
> tar tvf file.tar
-rw-rw-r-- user/user 0 2022-02-12 14:27 dir/inside/tar/newname.txt
如上所示,該功能是通過在文件名前加上冒號 ( :
來觸發的。 第二個冒號用作源文件位置和存檔內所需文件名之間的分隔符。
:[source file]:[desired name inside the tar]
此功能與-T
(來自文件的輸入列表)標志兼容。
如何編譯它
> git clone https://github.com/leso-kn/tar
> cd tar
> ./bootstrap
> ./configure
> make -j4
# Run it
> src/tar --version
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.