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
를 사용하면 bsdtar
infozip보다 더 현대적이고 유용한 아카이브 형식을 사용할 수도 있습니다.
이번에는 파일 이름에 개행 문자가 포함되어 있으면 작동합니다(분명히 패턴 자체는 그렇지 않습니다. 각 행에 files
이스케이프할 수 없는 개행 문자가 있기 때문입니다).
두 셸 모두 표준 셸 와일드카드 연산자(목록은 셸 및 각 셸에서 활성화된 glob 옵션에 따라 다름)를 확장합니다.