표준 입력을 통해 제공된 파일에서 아카이브(tar.gz, ...)를 생성합니다.

표준 입력을 통해 제공된 파일에서 아카이브(tar.gz, ...)를 생성합니다.

아카이브 내에서 파일 이름을 지정하면서 stdin을 통해 제공된 파일에서 압축된 아카이브를 자동으로 생성하고 싶습니다(아직 존재하지 않는 경우 아카이브를 생성).

7zip에는 제가 원하는 기능을 정확히 수행하는 기능이 있는 것 같습니다(도쿠).

사용법은 이렇습니다.

cat some_file.png | 7z a archive.7z -t7z -si"custom_filename1.png"

그러면 archive.7z에 "custom_filename1.png"라는 파일이 추가됩니다. 그러나 가능하다면 7zip 없이 이 작업을 수행하고 싶습니다. 왜냐하면 대부분의 Linux 배포판에는 7zip이 사전 설치되어 있지 않기 때문입니다. tar를 사용하여 이 작업을 수행하는 방법을 검색했지만 이것만 찾았습니다.우편 엽서내 컴퓨터에서는 작동하지 않는 것 같습니다.

임시 파일을 만들고 싶지 않습니다.

답변1

당신이 원하는 것은 tar다른 명령의 표준 출력에서 ​​차례로 아카이브에 파일을 추가하는 것입니다.

아카이브가 존재한다고 가정하면 다음 명령을 사용하여 지정된 파일을 아카이브에 추가할 수 있습니다.

tar -u -f archive.tar filename

또는 압축된 아카이브를 사용하는 경우

tar -uz -f archive.tar.gz filename

호출된 파일이 filename파일 시스템에 존재해야 합니다. 이는 워크플로에서 파일을 저장한 다음 아카이브에 추가한 다음 파일을 다시 삭제해야 함을 의미합니다.

다음과 같이 보일 수 있습니다:

somecommand filename.png >newfile1.png &&
tar -u -f archive.tar newfile1.png &&
rm newfile1.png

명령 간의 연결은 &&이전 명령이 어떤 이유로 실패하는 경우 명령이 실행되지 않도록 보장합니다.

기존 파일과 동일한 이름의 파일을 추가하면 아카이브의 이전 파일이 "숨겨지기" 때문에 각 파일을 새 이름으로 아카이브에 추가해야 합니다.

답변2

zip 및 bash 사용:

cat some_file.png | zip -v --fifo archive.zip /dev/stdin
printf '%s\n' '@ dev/stdin' '@=custom_filename1.png' | zipnote -w archive.zip

# view archive contents:
unzip -l archive.zip

Archive:  archive.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     5200  2020-09-26 12:41   custom_filename1.png
---------                     -------
     5200                     1 file

tar를 언급했지만 두 가지 제한 사항을 설명했습니다.

  1. 파이프에서 읽어 아카이브 생성 - 임시 파일을 생성할 필요 없음
  2. 널리 사용되는 보관 도구 사용

"임시 파일 없음" 제약 조건은 파이프에서 아카이브를 생성해야 함을 의미합니다. Tar는 파이프가 아닌 파일만 읽으므로 tar가 작동하지 않을 수 있습니다.

zip --fifo파이프에서 읽고 출력을 아카이브에 파일로 저장합니다. Zip은 tar만큼 인기가 없을 수도 있지만 확실히 7z보다 더 인기가 있습니다.

zip은 /dev/stdin에서 파일 내용을 읽습니다.

cat some_file.png | zip -v --fifo archive.zip /dev/stdin
    zip warning: Reading FIFO (Named Pipe): /dev/stdin
  adding: dev/stdin (in=39032) (out=1468) (deflated 96%)
total bytes=39032, compressed=1468 -> 96% savings

그러면 내용이 파일 some_file.png로 저장됩니다.archive.zipdev/stdin

그러면 저장된 파일의 이름 custom_filename1.png이 로 변경됩니다 zipnote. 이 이름 바꾸기 작업은 원자적으로 이루어지며 임시 파일이 생성되지 않습니다.

답변3

압축된 파일의 filename출력은 다음과 같습니다.filename.tgz

tar czf filename.tgz filename

파일 목록에 하나 이상의 파일을 압축합니다.

tar czf files.tar.gz --files-from ./filelist

같은 일이지만 방법이 다르다

ls -1b . >./filelist && tar czf ./files.tar.gz --files-from ./filelist

추가 파일 추가(타르볼 업데이트)

tar czuf ./files.tar.gz ./newfile

노트:tar옵션 버전 에 따라 다름가능한또는허용되지 않음앞이 필요해하이픈(-)

옵션 범례

  • 만들다
  • gzip압축 사용
  • 업데이트(추가 파일 추가)
  • 에프 tar파일 이름
  • --파일 출처압축/추가할 파일 목록으로 파일 내용 가져오기

또한보십시오타르 맨 페이지

화타이

답변4

파일 관리자로 이동하여 파일을 마우스 오른쪽 버튼으로 클릭하고 압축을 클릭한 다음 원하는 파일 형식으로 설정하면 이 문제를 쉽게 우회할 수 있습니다.

관련 정보