내 파일 구조는 다음과 유사합니다.
- root_folder_with_bad_name
- file1
- file2
- file3
다음 구조의 zip 아카이브를 가져와야 합니다.
- archive.zip
- some_folder
- file1
- file2
- file3
파일의 root_folder 이름을 모르므로 이 작업을 수행할 수 없습니다.
zip archive.zip some_root_folder_name
이 폴더 안의 파일을 압축할 수 있기를 원합니다. 어떻게 해야 하나요?
답변1
대상 보관 폴더 이름을 사용하여 임시 디렉터리 계층을 생성하고 압축한 후 삭제할 수 있습니다.
이는 현재 디렉터리에 bash
명명된 디렉터리(또는 파일)가 없다고 가정하여 작동합니다.archive
(
shopt -s extglob
mkdir archive &&
cp -al !(archive) archive &&
zip -r archive.zip archive
rm -rf archive
)
새 디렉터리 계층 구조는 복사되지 않고 연결되므로 (a) 속도가 빠르고 (b) 상당한 추가 디스크 공간을 차지하지 않습니다.
실제 사례
# Set up the files in a directory
mkdir secret_name; touch secret_name/file{1,2,3}
cd secret_name/
# Now create the archive
( shopt -s extglob; mkdir archive && cp -al !(archive) archive/ && zip -r archive.zip archive; rm -rf archive )
# List the archive
unzip -l archive.zip
Archive: archive.zip
Length Date Time Name
--------- ---------- ----- ----
0 2020-10-16 19:21 archive/
0 2020-10-16 19:12 archive/file2
0 2020-10-16 19:12 archive/file3
0 2020-10-16 19:12 archive/file1
--------- -------
0 4 files
답변2
zip
원본 파일과 이름이나 경로가 다른 아카이브 에 파일을 저장하려는 것 같습니다 . 경로를 완전히 제거하는 것 외에도파일의 경로나 파일명을 수정하는 zip
것은 불가능해 보입니다.일반적으로 사용되는 유틸리티를 사용합니다.
해결 방법으로 하드 링크를 사용하여 임시 폴더에 원하는 디렉터리 구조를 만들 수 있습니다.
tar
(사람들이 왜 . 및 을 언급하는지 모르겠습니다 gzip
. 귀하가 파일을 원한다고 명시적으로 밝혔기 때문에 관련이 없습니다 zip
.)
답변3
libarchive bsdtar
및 해당 -s
옵션을 사용하여 아카이브에 추가된 파일의 경로를 편집할 수 있습니다.
$ ls
file1 file2 file3
$ bsdtar --format=zip -'s|^\.|some_folder|' -cf ../file.zip .
$ unzip -l ../file.zip
Archive: ../file.zip
Length Date Time Name
--------- ---------- ----- ----
0 2020-10-16 21:15 some_folder/
0 2020-10-16 21:15 some_folder/file1
0 2020-10-16 21:15 some_folder/file3
0 2020-10-16 21:15 some_folder/file2
--------- -------
0 4 files
답변4
또한 이것은 파일을 복사하지 않고 심볼릭 링크를 사용하여 작동하는 것 같습니다.
> ls old_parent/
file1 file2
> ln -s old_parent new_parent
> zip -r archive.zip new_parent
adding: new_parent/ (stored 0%)
adding: new_parent/file2 (deflated 22%)
adding: new_parent/file1 (deflated 38%)
> unzip -l archive.zip
Archive: archive.zip
Length Date Time Name
--------- ---------- ----- ----
0 2020-10-16 22:48 new_parent/
50 2020-10-14 08:18 new_parent/file2
348 2020-10-16 13:58 new_parent/file1
--------- -------
398 3 files
> rm new_parent