파일 목록이 포함된 텍스트 파일이 있습니다.
나는 사용한다.
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
\0
xargs -0
tar
-0
xargs
의견을 보내주신 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로 파이프됩니다 . 마지막 비트는 tar
STDIN을 입력으로 사용하도록 지시합니다 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 use
tail -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
나는 당신이 원하는 행 수를 소프트 코딩할 수 있도록 while
do 대신 루프를 사용합니다.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 -