아카이브 내에서 파일 이름을 지정하면서 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를 언급했지만 두 가지 제한 사항을 설명했습니다.
- 파이프에서 읽어 아카이브 생성 - 임시 파일을 생성할 필요 없음
- 널리 사용되는 보관 도구 사용
"임시 파일 없음" 제약 조건은 파이프에서 아카이브를 생성해야 함을 의미합니다. 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.zip
dev/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
파일 관리자로 이동하여 파일을 마우스 오른쪽 버튼으로 클릭하고 압축을 클릭한 다음 원하는 파일 형식으로 설정하면 이 문제를 쉽게 우회할 수 있습니다.