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변환 작업이 수행됩니다 . 결과는 로 파이프되어 해당 행을 모두 명령에 대한 인수로 변환합니다. 인수는 공백 대신 널 문자를 기반으로 별도의 인수를 만듭니다 . 이렇게 하면 파일 이름에 공백이 있어도 명령이 작동합니다.\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)를 널 문자( \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 -

관련 정보