tar テキストファイルにリストされている特定の数のファイル

tar テキストファイルにリストされている特定の数のファイル

ファイルのリストを含むテキストファイルがあります。

私は使用します。

tar --null --no-recursion -uf abc.tar --directory= /tmp/temp --files-from abc.txt

このコマンドは、単にテキストファイルにリストされているすべてのファイルを含むtarを生成します。

リストから選択した数のファイルのみを圧縮する方法はありますか?たとえば、テキストファイルにリストされている最初の50ファイルのみが説明されます。

答え1

次のように試すことができます:(ファイル名にスペースを許可するように更新されました。)

head -50 abc.txt | tr "\n" "\0" | xargs -0 tar --null -no-recursion -uf abc.tar --directory=/tmp/temp

このコマンドはhead -50リストファイルの最初の50行を取得します。結果|はにパイプされますtr。デフォルトでは、改行文字をnull文字に置き換えるtr変換操作が行われます。結果はにパイプされ、その行をすべてコマンドの引数に変換します。引数は、空白ではなくNULL文字に基づいて別々の引数を作成します。これにより、ファイル名にスペースが含まれていてもコマンドが機能します。\n\0xargs -0tar-0xargs

コメントをお寄せいただいたJordanに感謝します。

答え2

headまたはを使用して、限られtailた数のファイルを制御できますabc.txt

はい

サンプルabc.txtファイル。

$ cat abc.txt
afile1
afile10
afile2
afile3
afile4
afile5
afile6
afile7
afile8
afile9

次の場所に最初の3つのファイルのみをパッケージ化しますabc.txt

$ head -3 abc.txt | tr '\n' '\0' | tar --null --no-recursion -uf abc.tar -T -

上記の出力は、head ...行末文字(\n)をNULL文字(\0)に変換します。その後、この出力は-T -STDIN()を介して出力を受け取るtarにパイプされます。最後のビットはtarSTDINを入力として使用するように指示しますtar

確認するabc.tar

$ tar tvf abc.tar 
-rw-rw-r-- saml/saml         0 2013-08-05 13:24 afile1
-rw-rw-r-- saml/saml         0 2013-08-05 13:24 afile10
-rw-rw-r-- saml/saml         0 2013-08-05 13:24 afile2

上記の内容をhead -3 ...head -100 ... for example, to get the 1st 100. Or you could usetail -100 ... `から変更して、ファイルの最後の100を取得できます。

答え3

Bichoyの答えに対するjordanmのコメントに触発され、空白のあるファイル名を処理する方法は次のとおりです。

count=50
i=1
while [ $i -le $count ]
do
    read filename
    tar --null -no-recursion -ruf abc.tar "$filename" --directory=/tmp/temp
    i=$(($i+1))
done <abc.txt

私はあなたが望む行数をソフトコーディングできるようにwhiledoの代わりにループを使います。for i in {1..50}

答え4

ファイル名に改行がないと確信している場合は、nullバイトを改行に変換してhead最初の数行を保持するように呼び出します。

<abc.txt tr '\0' '\n' |
head -n 50 |
tar --null --no-recursion -uf abc.tar --directory= /tmp/temp --files-from -

改行文字を含むファイル名を処理するには、改行文字とnullを変換してからhead内容をそのままにして再変換します。

<abc.txt tr '\0\n' '\n\0' |
head -n 50 |
tr '\0\n' '\n\0' |
tar --null --no-recursion -uf abc.tar --directory= /tmp/temp --files-from -

関連情報