아카이브의 와일드카드 문자에는 파일이 포함됩니다.

아카이브의 와일드카드 문자에는 파일이 포함됩니다.

Create Backup을 사용할 때 rsync --include-from=inclusion-file포함 파일은 와일드카드를 지원하므로 + .*rc홈 디렉터리에 모든 리소스 파일을 포함할 수 있습니다.

Zip은 파일 포함도 지원하지만 와일드카드는 작동하지 않으므로 각 파일 이름을 입력해야 합니다. (나는 이것이 버그이거나 이상한 결점이라고 말하고 싶습니다. 누군가가 좀 밝힐 수 있습니까?)

$ cat files
.*rc
$ ls .*rc
.ackrc  .bashrc  .mailrc
$ zip -@ out < files
    zip warning: name not matched: .*rc

와일드카드를 작동시키는 방법을 아는 사람이 있나요? 제가 생각할 수 있는 유일한 해결 방법은 명령줄 자체에 와일드카드 패턴을 넣는 것입니다. zip -@ out < files *.rc.

이 질문은 모든 UNIX 아카이빙 도구를 나타냅니다. 우편 번호가 선호되지만 필수는 아닙니다.

답변1

7z(에서7개의 지퍼)은 목록 파일에서 와일드카드를 사용합니다(자체 파일 외에 ZIP 형식 파일을 생성할 수 있음).

답변2

텍스트 파일 이름이 필요한 옵션에 대한 평가가 zip올바른 것 같습니다. -@내 문서는 계속됩니다.

Unix에서는 이 옵션을 find(1) 명령과 함께 사용하여 강력한 효과를 얻을 수 있습니다. 예를 들어, 현재 디렉터리와 해당 하위 디렉터리에 있는 모든 C 소스 파일을 아카이브하려면 다음을 수행하세요.

find . -name "*.[ch]" -print | zip source -@

이 정도면 귀하의 필요에 충분합니까? 현재 디렉터리에 일치하는 모든 파일을 보관하려는 간단한 경우에는 언급한 .*rc대로 zip out .*rc이 작업을 수행하면 됩니다. 하위 폴더에서 해당 파일을 모두 재귀적으로 고려해야 하는 경우 find위의 순서를 조정할 수 있습니다.

find . -name '.*rc' | zip -@ out

답변3

언제든지 쉘에서 와일드카드를 확장할 수 있습니다.

그리고 bash:

(
  shopt -s nullglob
  IFS=$'\n'
  set -- $(<files) # split+glob
  (($# == 0)) || printf '%s\n' "$@"
) | zip -@ out

사용 zsh(플래그로 중복 제거 u):

print -rC1 -- ${(u)~${(f)"$(<files)"}/%/(N)} | zip -@ out

파일 이름에 개행 문자가 포함되어 있지 않다고 가정합니다.

그리고 bsdtar:

(
  shopt -s nullglob
  IFS=$'\n'
  set -- $(<files) # split+glob
  (($# == 0)) || printf '%s\0' "$@"
) | bsdtar --null --format zip -T - -cf out.zip

zsh:

print -rNC1 -- ${(u)~${(f)"$(<files)"}/%/(N)} |
  bsdtar --null --format zip -T - -cf out.zip

를 사용하면 bsdtarinfozip보다 더 현대적이고 유용한 아카이브 형식을 사용할 수도 있습니다.

이번에는 파일 이름에 개행 문자가 포함되어 있으면 작동합니다(분명히 패턴 자체는 그렇지 않습니다. 각 행에 files이스케이프할 수 없는 개행 문자가 있기 때문입니다).

두 셸 모두 표준 셸 와일드카드 연산자(목록은 셸 및 각 셸에서 활성화된 glob 옵션에 따라 다름)를 확장합니다.

관련 정보